Удаление дублирующих ключей из словаря Python, но объединение значений дублированных ключей - PullRequest
0 голосов
/ 26 декабря 2018

Допустим, у меня есть два списка:

lista = ['winter', 'fall', 'spring', 'summer', 'winter', 'spring']
listb = ['cold', 'rainy', 'windy', 'hot', 'chilly', 'wet']

Я хочу создать словарь, который будет извлекать в качестве ключа уникальные значения из lista (что будет происходить автоматически, поскольку словари могут иметь только уникальные ключи) изначения из списка b в качестве значения словаря, соответствующего спискам по их порядку.Таким образом, чтобы создать словарь, я бы сделал:

mydict = {k: v for k, v in zip(lista, listb)}

Если я напечатаю это, я получу:

{'winter': 'chilly', 'fall': 'rainy', 'spring': 'wet', 'summer': 'hot'}

Однако то, что я хотел бы сделать, это для каждого "ключа"из lista, который является дубликатом, я хотел бы объединить значения из listb, чтобы они были «значением» в словаре в виде списка.Таким образом, цель была бы:

{'winter': ['cold', 'chilly'], 'fall': ['rainy'], 'spring': ['windy', 'wet'], 'summer': ['hot']}

Это глупая версия того, что я пытаюсь сделать, но я думаю, что это применимо - я читаю файл csv и пытаюсь создать столбец «Фамилия»ключ и каждая вторая строка значения (в виде списка).Пока что я создал список для фамилий и список для других строк, но мне нужно объединить значения для повторяющихся имен.

Ответы [ 2 ]

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

Нет необходимости явно инициализировать значения с пустыми списками, используйте defaultdict:

from collections import defaultdict

lista = ['winter', 'fall', 'spring', 'summer', 'winter', 'spring']
listb = ['cold', 'rainy', 'windy', 'hot', 'chilly', 'wet']

d = defaultdict(list)
for x, y in zip(lista, listb):
    d[x].append(y)

print(dict(d))

Обратите внимание, что нет необходимости приводить к dict, как я,поскольку defaultdict является подклассом dict.Я просто сделал это, чтобы вывод точно соответствовал вашим требованиям.

Результат:

{'winter': ['cold', 'chilly'], 'fall': ['rainy'], 'spring': ['windy', 'wet'], 'summer': ['hot']}
0 голосов
/ 26 декабря 2018

Как насчет этого?

lista = ['winter', 'fall', 'spring', 'summer', 'winter', 'spring']
listb = ['cold', 'rainy', 'windy', 'hot', 'chilly', 'wet']
mydict = {k : [] for k in lista}
for k,v in zip(lista, listb):
    mydict[k].append(v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...