Я пытаюсь получить доступ к элементу dict_key по его индексу:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
Я хочу получить foo
.
то же самое с:
keys[0]
TypeError: 'dict_keys' object does not support indexing
Как я могу это сделать?
python
dictionary
python-3.x
key
fj123x
источник
источник
dict.keys()
возвращает набор, подобный объекту представления, а не списку (поэтому индексация невозможна). Использованиеkeys = list(test)
collections.OrderedDict
если хотите заказать ключи)Ответы:
list()
Вместо этого вызовите словарь:В Python 3
dict.keys()
метод возвращает объект представления словаря , который действует как набор. Итерация по словарю напрямую также дает ключи, поэтому превращение словаря в список приводит к списку всех ключей:источник
dict
подкласс, например, где.keys()
он обрабатывается в коде Python (например, может иметь место переключение потока).sorted(dict)
сделал бы то же самое; создать список ключей в отсортированном порядке.list(dict)
предоставит вам список в порядке словаря.keys = [*test]
Не полный ответ, но, возможно, полезный намек. Если это действительно первая вещь, которую вы хотите *, тогда
намного быстрее, чем
для больших dicts, так как все это не должно храниться в памяти.
Я обнаружил, что для 10.000.000 элементов это почти в 40.000 раз быстрее.
* Первый элемент в случае, если dict был просто псевдослучайным элементом до Python 3.6 (после этого он заказывается в стандартной реализации, хотя не рекомендуется полагаться на него).
источник
Мне нужна пара «ключ» и «значение» для первого элемента словаря. Я использовал следующий код.
источник
Обычный способ добавления ключей к статически определенному списку и последующего индексирования его для того же
источник
ls = list(test.keys())
? Я считаю, что это проще.Во многих случаях это может быть проблема XY . Почему вы индексируете ключи словаря по позициям? Вам действительно нужно? До недавнего времени словари в Python даже не упорядочивались, поэтому доступ к первому элементу был произвольным.
Я только что перевел код Python 2 на Python 3:
что не очень красиво, но и не очень плохо. Сначала я собирался заменить его чудовищным
прежде чем я понял, что все это намного лучше написано как
который отлично работает.
Я считаю, что во многих других случаях индексации ключей словаря по позиции можно избежать. Хотя словари упорядочены в Python 3.7, полагаться на это не очень приятно. Приведенный выше код работает только потому, что содержимое
some_list
было недавно создано из содержимогоd
.Внимательно посмотрите на свой код, если вам действительно нужен доступ к
disk_keys
элементу по индексу. Возможно, вам и не нужно.источник
Попробуй это
Результат выглядит так. ['фу', 'привет']
Вы можете найти более возможные решения здесь .
источник