перебирать список и возвращать значение из вложенного dict по позиции - PullRequest
0 голосов
/ 07 сентября 2018

Предположим, у меня есть список словарей

meta_list = [
    {"id": 9, "name": "Tennis", "type": "SPORT", "url-name": "tennis"}, 
    {"id": 410468520880009, "name": "Live Betting", "type": "OTHER", "url-name": "live-betting"},
    {"id": 423407498380010, "name": "China", "type": "COUNTRY", "url-name": "china"},
    {"id": 613128412140012, "name": "September 7th 2018", "type": "DATE", "url-name": "september-7th-2018"},
    {"id": 643136938410012, "name": "QF", "type": "OTHER", "url-name": "qf"},
    {"id": 899076982160041, "name": "Zhangjiagang ATP Challenger", "type": "COMPETITION", "url-name": "zhangjiagang-atp-challenger"}
]

Что я пытаюсь сделать, это извлечь значение для «имени» в 6-м словаре,

for i in meta_list:
    event_name = i['name'][6]
    print(event_name)

Я получаю индекс списка из-за ошибки диапазона. Как вы извлекаете имя «имя»: «Чжанцзяган АТФ Челленджер», из meta_list?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Давайте объясним вам шаг за шагом:

  • сначала вы должны получить 6-й элемент списка от meta_list до meta_list[5] (поскольку 6-й элемент имеет индекс 5, индексирование которого начинается с 0 в Python): вы получаете словарь
  • тогда вы должны получить значение, связанное с ключом 'name' в этом словаре, через meta_list[5]['name']
  • и все готово!

Решение:

print(meta_list[5]['name'])   # Zhangjiagang ATP Challenger

Что касается исходного кода, который не работает, оператор for i in meta_list выполняет итерации по каждому элементу meta_list, то есть по каждому словарю. Когда вы делаете event_name = i['name'][6], вы пытаетесь получить 7-й символ значения, связанного с клавишей name, что вызывает ошибку, потому что «Теннис» (в первом словаре) короче, чем 7 символов. Ошибка IndexError: string index out of range вполне понятна.

0 голосов
/ 07 сентября 2018

«i» относится к каждому элементу в словаре. Чтобы получить доступ к значению ключа «имя», используйте i ['name']:

for i in meta_list:
    event_name = i['name']
    print(event_name)
0 голосов
/ 07 сентября 2018

Вы можете сделать индексацию Python:

meta_list[5]['name']

Также обратите внимание, что индексация Python начинается с нуля

Пояснение:

  1. получить шестой (пятый) элемент из meta_list

  2. получить ключ 'name'

  3. Да, все готово

Ваш код не работает, потому что ваша итерация через meta_list затем получает 6-й символ 'name' ключа i словаря

В конце вы получите:

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