Индексирование переменных с помощью циклов - PullRequest
0 голосов
/ 03 марта 2020

В моем коде я пытаюсь вставить значения в словарь путем индексации значений в списке и во вложенном списке (два отдельных ввода).

def list_to_dict(titles, nested_list):
    nobel_awards = {}

    index = 0 

    for i in nested_list:
        year_category = {}
        year_category[titles[1]] = nested_list[i][1]
        year_category[titles[2]] = nested_list[i][2]
        nobel_awards[nested_list[i][0]] = year_category 

    return nobel_awards

Возвращает ошибку с указанием «индексы списка должны быть целыми числами, слайсерами '

Я не понимаю, почему.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Насколько я понимаю, вы получаете доступ к списку со значением списка, а не по его индексу. Вы можете использовать функцию enumerate() в l oop и заменить переменную i индексом списка. Например:

for index, value in enumerate(nested_list):
    ''' Your code here '''
    year_category[titles[1]] = nested_list[index][1] #sample
    ...

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

1 голос
/ 03 марта 2020

Из вашего кода я могу понять, что вы пытаетесь создать дикты из списка ключей (заголовков) и из списка списков.

В python вы можете использовать функцию zip () для этого. В вашем случае это будет выглядеть примерно так:


def list_to_dict(titles, nested_list):
    nobel_awards = {}
    for award in nested_list:
        year_category = dict(zip(titles, award))
        nobel_awards[year_category['name']] = year_category
    return nobel_awards


nested_list = [['Test', 'title'], ['test2', 'title2']]
titles = ['name', 'title']
result = list_to_dict(titles, nested_list)

print(result)

Где результат будет выглядеть так:

{'Test': {'name': 'Test', 'title': 'title'}, 'test2': {'name': 'test2', 'title': 'title2'}}
...