Прежде всего, если вы хотите использовать кортеж в качестве ключа, используйте круглые скобки:
{('10000"Bus Name 1"46.0000', 10, 105): {...}}
Во-вторых, вы не решаетесь поместить некоторую информацию в основной ключ, как указано выше, чтобы избежать включения oop в внутренние ключи. Но это не то, как словари реализованы. На большинстве языков словарями являются га sh таблиц . Существует много реализаций, но основной принцип:
- использует функцию, которая отображает ключи в int (
hash
) - , хранит пары
key, value
в массив с индексом в зависимости от hash
(например, hash % len(array)
) - найти способ разрешения коллизий (разные ключи, имеющие одинаковые
hash
)
Обычно есть столкновений мало, поэтому поиск выполняется за постоянное время (амортизируется O(1)
) и не требует al oop (O(n)
, где n
- количество key, value
пар). В основном, это быстро и не зависит от размера диктата.
Вывод таков: ваша оптимизация, вероятно, не очень хорошая идея (я осторожен, потому что это зависит от сложных факторы, но я уверен, что это не будет узким местом вашей программы).
У вас есть другая проблема: как найти данные, соответствующие '10000"Bus Name 1"46.0000'
, если вы не знаете область и зону? И если вам не нужен прямой поиск, просто используйте список одноуровневых диктов и забудьте о двухуровневых диктах:
[{id: '10000"Bus Name 1"46.0000', 'name': 'Bus Name 1', 'kv': 46.0, ... }, {id: ... }, {id: ... }]
Если вам нужно найти данные по id
или по области или по Зона, вы могли бы создать вспомогательные дикты для отображения zone -> set of id having that zone
или area -> set of id having that area
.
И если вам нужно выбрать данные по конкретным c комбинациям ключ / значение, сортировать, объединять, ... , может быть, вам стоит взглянуть на Pandas или на базу данных вроде sqlite