Python: добавление двух элементов из списка в качестве ключа: пара в словарь - PullRequest
0 голосов
/ 11 июля 2019

Попытка преобразовать список элементов как пары ключ: значение в dict:

def make_dict(a_list, category_name):

    a_dict = {}


    for i in range(0, len(a_list), 2):
        a_dict[a_list[i]] = a_list[i+1]
    return a_dict

, получая эту ошибку:

a_dict[a_list[i]] = a_list[i+1]
IndexError: list index out of range

Я понимаю, почему, но я не уверенкак это исправить.Любые решения?

Кроме того, он собирает пары ключ: значение непосредственно перед тем, как он выходит за пределы диапазона.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Ваш код должен работать для четного числа элементов в списке, но если у вас нечетное количество элементов, элемент с индексом i+1 не существует, следовательно, ошибка.

Вы также можете zip через тот же итератор, чтобы использовать последовательные значения в виде пар, с пониманием dict:

In [239]: lst = [1, 2, 3, 4, 5, 6]                                                                                                                                                                          

In [240]: {k: v for k, v in zip(*[iter(l)] * 2)}                                                                                                                                                            
Out[240]: {1: 2, 3: 4, 5: 6}

Для нечетного числа элементов вы можете использовать itertools.zip_longest с fillvalue для заполнения пропущенного последнего значения:

In [241]: lst = [1, 2, 3, 4, 5, 6, 7]                                                                                                                                                                       

In [242]: {k: v for k, v in itertools.zip_longest(*[iter(l)] * 2, fillvalue=None)}                                                                                                                          
Out[242]: {1: 2, 3: 4, 5: 6, 7: None}
0 голосов
/ 11 июля 2019

Ваш цикл в настоящее время заканчивается длиной списка (len(a_list)), но вызов индекса с таким значением длины прервет его.Просто исправьте свой цикл, чтобы остановить его раньше:

    for i in range(0, len(a_list)-1, 2): #subtract 1 from length!
        a_dict[a_list[i]] = a_list[i+1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...