Доступ к элементам словаря Python по индексу - PullRequest
96 голосов
/ 23 марта 2011

Считайте что-то вроде

mydict = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} }

Как мне получить доступ к определенному элементу этого словаря? например, я хотел бы напечатать первый элемент после некоторого форматирования первого элемента Apple, который в нашем случае является только «американским»?

Дополнительная информация Приведенная выше структура данных была создана путем анализа входного файла в функции python. Однако после создания он остается тем же для этого прогона.

Я использую эту структуру данных в своей функции.

Таким образом, если файл изменится, при следующем запуске этого приложения содержимое файла будет другим, и, следовательно, содержимое этой структуры данных будет другим, но формат будет таким же. Итак, вы видите, что я в своей функции не знаю, что первым элементом в Apple является «американский» или что-то еще, поэтому я не могу напрямую использовать «американский» в качестве ключа.

Ответы [ 8 ]

105 голосов
/ 23 марта 2011

Учитывая, что это словарь, вы получаете к нему доступ с помощью клавиш.Получив словарь, хранящийся в «Apple», сделайте следующее:

>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}

И узнав, сколько из них американцы (16), сделайте так:

23 голосов
/ 23 марта 2011

Если возникают вопросы, если я знаю, что у меня есть диктант, в котором «Яблоко» - как фрукт, а «Американец» - как тип яблока, я бы использовал:

myDict = {'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
          'Grapes':{'Arabian':'25','Indian':'20'} }


print myDict['Apple']['American']

как другие предложили. Если вместо этого есть вопросы, вы не знаете, существует ли «Apple» как фрукт и «американский» как тип «Apple», когда вы читаете произвольный файл в свою структуру данных dict of dict, вы можете сделать что-то вроде:

print [ftype['American'] for f,ftype in myDict.iteritems() if f == 'Apple' and 'American' in ftype]

или еще лучше, так что вы не будете без необходимости перебирать весь набор слов, если знаете, что только у Apple есть тип American:

if 'Apple' in myDict:
    if 'American' in myDict['Apple']:
        print myDict['Apple']['American']

Во всех этих случаях не имеет значения, в каком порядке словари на самом деле хранят записи. Если вы действительно обеспокоены порядком, то вы можете использовать OrderedDict:

http://docs.python.org/dev/library/collections.html#collections.OrderedDict

18 голосов
/ 25 февраля 2014

Как я заметил ваше описание, вы просто знаете, что ваш синтаксический анализатор выдаст вам словарь, что его значения тоже являются словарями:

sampleDict = {
              "key1": {"key10": "value10", "key11": "value11"},
              "key2": {"key20": "value20", "key21": "value21"}
              }

Итак, вы должны перебрать свой родительский словарь. Если вы хотите распечатать или получить доступ ко всем первым словарным ключам в списке sampleDict.values(), вы можете использовать что-то вроде этого:

for key, value in sampleDict.items():
    print value.keys()[0]

Если вы хотите просто получить доступ к первому ключу первого элемента в sampleDict.values(), это может быть полезно:

print sampleDict.values()[0].keys()[0]

Если вы используете пример, который вы дали в вопросе, я имею в виду:

sampleDict = {
              'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
              'Grapes':{'Arabian':'25','Indian':'20'}
              }

Выход для первого кода:

American
Indian

И вывод для второго кода:

American
9 голосов
/ 22 февраля 2016

В качестве бонуса я хотел бы предложить несколько иное решение вашей проблемы.Похоже, вы имеете дело с вложенными словарями, что, как правило, утомительно, особенно если вам нужно проверить наличие внутреннего ключа.

Есть несколько интересных библиотек, касающихся этого, в pypi, вот быстрый поиск для вас.

В вашем конкретном случае dict_digger кажется подходящим.

>>> import dict_digger
>>> d = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} 
}

>>> print(dict_digger.dig(d, 'Apple','American'))
16
>>> print(dict_digger.dig(d, 'Grapes','American'))
None
8 голосов
/ 23 марта 2011

Вы можете использовать dict['Apple'].keys()[0] для получения первого ключа в словаре Apple, но нет гарантии, что он будет American.Порядок ключей в словаре может меняться в зависимости от содержимого словаря и порядка добавления ключей.

4 голосов
/ 23 марта 2011

Вы не можете положиться на заказ в словарях. Но вы можете попробовать это:

dict['Apple'].items()[0][0]

Если вы хотите сохранить заказ, вы можете использовать это: http://www.python.org/dev/peps/pep-0372/#ordered-dict-api

2 голосов
/ 22 марта 2019

Я знаю, что это 8 лет, но никто, кажется, на самом деле не читал и не ответил на вопрос.

Вы можете вызвать .values ​​() для dict, чтобы получить список внутренних диктов и, таким образом,получить доступ к ним по индексу.

>>> mydict = {
...  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
...  'Grapes':{'Arabian':'25','Indian':'20'} }

>>>mylist = mydict.values()
>>>mylist[0]
{'American':'16', 'Mexican':10, 'Chinese':5},
>>>mylist[1]
{'Arabian':'25','Indian':'20'}

>>>myInnerList1 = mylist[0].values()
>>>myInnerList1
['16', 10, 5]
>>>myInnerList2 = mylist[1].values()
>>>myInnerList2
['25', '20']
0 голосов
/ 12 июня 2018

Простой пример, чтобы понять, как получить доступ к элементам в словаре: -

Создать словарь

d = {'dog' : 'bark', 'cat' : 'meow' } 
print(d.get('cat'))
print(d.get('lion'))
print(d.get('lion', 'Not in the dictionary'))
print(d.get('lion', 'NA'))
print(d.get('dog', 'NA'))

Узнайте больше о Словарях Python и изучите в интерактивном режиме здесь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...