假设我有两个列表:
lista = ['winter', 'fall', 'spring', 'summer', 'winter', 'spring']
listb = ['cold', 'rainy', 'windy', 'hot', 'chilly', 'wet']
我想创建一个字典,从 lista 中提取唯一值作为键(它会自动执行,因为字典只能有唯一键),并从列表 b 中提取值作为字典值,按顺序对应于 lista 。因此,要创建字典,我会这样做:
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 文件并尝试将“姓氏”列设为键,并将每隔一行设为值(作为列表)。到目前为止,我已经创建了姓氏列表和其他行的列表,但我需要连接重复名称的值。
最佳答案
无需使用空列表显式初始化值,请使用 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']}
关于python - 从python字典中删除重复的键但连接重复键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53936733/