Доступ к элементу 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 (после этого он упорядочен в стандартной реализации, хотя на него не рекомендуется полагаться).