Конвертировать пару объектов списка в словарь с включенными дубликатами - PullRequest
0 голосов
/ 09 декабря 2018

Я могу объединить два списка в словарь, как показано ниже -

list1 = [1,2,3,4]
list2 = ['a','b','c','d']
dct = dict(zip(list1, list2))
print(dct)

Результат,

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

Однако с дубликатами, как показано ниже,

list3 = [1,2,3,3,4,4]
list4 = ['a','b','c','d','e','f']
dct_ = dict(zip(list1, list2))
print(dct)

Iget,

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

Что я должен сделать, чтобы рассматривать дубликаты в моем списке как отдельные ключи в моем результирующем словаре?

Я ожидаю результатов, как показано ниже -

{1: 'a', 2: 'b', 3: 'c', 3: 'd', 4: 'e', 4: 'f'}

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

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

Простой способ сделать это с помощью dict.setdefault():

list3 = [1,2,3,3,4,4]
list4 = ['a','b','c','d','e','f']

d = {}
for x, y in zip(list3, list4):
    d.setdefault(x, []).append(y)

print(d)
# {1: ['a'], 2: ['b'], 3: ['c', 'd'], 4: ['e', 'f']}

Другой вариант - использовать collections.defaultdict(), как показано в @ 1012 * ответе @ YOLO .

0 голосов
/ 09 декабря 2018

Вместо этого вы можете создать словарь со значениями в виде списка:

from collections import defaultdict
d = defaultdict(list)

for k,v in zip(list3, list4):
    d[k].append(v)

defaultdict(list, {1: ['a'], 2: ['b'], 3: ['c', 'd'], 4: ['e', 'f']})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...