python - 从python字典中删除重复的键但连接重复键的值

标签 python list dictionary concatenation

假设我有两个列表:

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,因为 defaultdictdict 的子类。我这样做是为了让输出完全符合您的要求。

结果:

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

关于python - 从python字典中删除重复的键但连接重复键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53936733/

相关文章:

python - 我如何捕获 UDP 数据包并使用 python 从数据包中找到 TTL 值

python - 如何实时更新图像文件 Pygame?

c++ - 附加到 C++ 中的多态列表?

list - 满足 haskell 中大多数元素的函数

python - 如何测试Python列表中序列的成员资格?

ios - NSDictionary 的 NSArray - 当数组中只有一个字典而不是一个对象的数组时返回 NSDictionary

python - 多维数组索引C++中的多维数组

javascript - 从 openpyxl.chart.title 导入标题 - AttributeError : 'list' object has no attribute

python - 基于差异的过滤数据框有两个系列,一个通过字典映射

jsf - 如何在 h :inputText 中设置 Map 值