При попытке создать словарь из двух списков теряются некоторые элементы

У меня есть два списка:

list_1 = ['2', '1', '1', '2', '1', '2', '1', '5', '4', '3', '2', '1', '3', '2', '1']
list_2 = ['az', 'z', 'c', 'bo', 'o', 'bo', 'o', 'beggh', 'eggh', 'ggh', 'gh', 'h', 'akl', 'kl', 'l']

Количество строк в двух списках одинаково. Я хочу создать словарь из двух списков, поэтому пытаюсь:

new_dict = dict(zip(list_1, list_2))

Я ожидаю чего-то вроде:

{
  '2' : 'az',
  '1' : 'z',
  '1' : 'c',
  ....


}

Я также ожидаю, что количество пар ключ-значение в словаре такое же, как количество строк в списке_1 или списке_2. Однако, когда я пытаюсь распечатать словарь, он дает:

{'2': 'kl', '1': 'l', '5': 'beggh', '4': 'eggh', '3': 'akl'}

Количество пар ключ-значение всего 5, что явно меньше количества строк в списке_1 или списке_2. Что пошло не так?

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

user3483203 13.09.2018 19:55

Ключи словаря должны быть уникальными, это часть dicts.

Daniel Roseman 13.09.2018 19:55

Как сказал @ user3483203, у вас не может быть повторяющихся ключей. Если вам нужно объединить эти значения в пары, составьте список кортежей или список списков.

Lucas Wieloch 13.09.2018 19:56

Понимание словаря существует для таких вещей, нет?

Swift 13.09.2018 20:07

Понимание словаря не будет корректно обрабатывать повторяющиеся ключи.

kindall 13.09.2018 20:14
2
5
328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас не может быть словаря с дублированными ключами, одним из решений было бы сгруппировать значения по ключу, вот пример с использованием itertools.groupby

from itertools import groupby
list_1 = ['2', '1', '1', '2', '1', '2', '1', '5', '4', '3', '2', '1', '3', '2', '1']
list_2 = ['az', 'z', 'c', 'bo', 'o', 'bo', 'o', 'beggh', 'eggh', 'ggh', 'gh', 'h', 'akl', 'kl', 'l']

new_dict = {
    k : list(map(lambda x: x[1], v)) for k, v in groupby(sorted(zip(list_1, list_2)), key=lambda x: x[0])
}
print(new_dict)

Живой пример

Или просто используйте defaultdict

from collections import defaultdict
new_dict = defaultdict(list)
for k, v in zip(list_1, list_2):
    new_dict[k].append(v)

Другие вопросы по теме