从python字典中删除重复键,但串联重复键的值

2024-05-14 04:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个列表:

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

我想创建一个dictionary,从lista中提取唯一值作为键(它将自动执行,因为dictionary只能有唯一键),从list b中提取值作为dictionary值,按顺序与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文件,并试图使“姓氏”列的关键,并每隔一行的值(作为一个列表)。到目前为止,我已经为姓氏和其他行创建了一个列表,但是我需要连接重复名称的值。你知道吗


Tags: 列表dictionarysummerspringhot姓氏wetlista
2条回答

无需使用空列表显式初始化值,请使用^{}

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']}

这个怎么样?你知道吗

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)

相关问题 更多 >