Доступ к элементу dict_keys по индексу в Python3
Я пытаюсь получить доступ к элементу 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
Как я могу это сделать?
Ответы
Ответ 1
Вызвать list()
в словаре:
keys = list(test)
В Python 3 метод dict.keys()
возвращает объект просмотра словаря, который действует как набор. Итерация по словарю напрямую также дает ключи, поэтому включение словаря в список приводит к списку всех ключей:
>>> test = {'foo': 'bar', 'hello': 'world'}
>>> list(test)
['foo', 'hello']
>>> list(test)[0]
'foo'
Ответ 2
Не полный ответ, но, возможно, полезный намек. Если это действительно первый элемент, который вы хотите *, то
next(iter(q))
намного быстрее, чем
list(q)[0]
для больших dicts, так как все это не нужно хранить в памяти.
Для 10.000.000 элементов я нашел, что это почти в 40 000 раз быстрее.
* Первый элемент в случае, когда dict является просто псевдослучайным элементом перед Python 3.6 (после этого он упорядочен в стандартной реализации, хотя на него не рекомендуется полагаться).