Доступ к элементу ключей dict по индексу в 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

как я могу это сделать?

3 65

3 ответа:

вызов list() в словаре вместо этого:

keys = list(test)

в Python 3,dict.keys() метод возвращает a посмотреть в словарь объекта, который действует как установить. Итерация по словарю напрямую также дает ключи, поэтому превращение словаря в список приводит к списку всех ключей:

>>> test = {'foo': 'bar', 'hello': 'world'}
>>> list(test)
['foo', 'hello']
>>> list(test)[0]
'foo'

не полный ответ, но, возможно, полезный совет. Если это действительно первый пункт, который вы хотите*, то

next(iter(q))

гораздо быстрее, чем

list(q)[0]

для больших диктов, так как все это не должно храниться в памяти.

для 10.000.000 элементов я обнаружил, что это почти в 40.000 раз быстрее.

*первый элемент в случае диктатора является просто псевдослучайным элементом перед Python 3.6 (после этого он заказывается в стандарте реализация, хотя и не советую на нее полагаться).

другой другой подход будет использовать серию панд, как это:

import pandas as pd
pd.Series(dict).index.values.tolist()

Это может быть излишне и не очень быстро, но для меня очень ясно и читаемо.