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

时间:2018-12-26 20:18:46

标签: python list dictionary concatenation

假设我有两个列表:

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

我想创建一个字典,将lista的唯一值作为键(由于字典只能具有唯一键,它将自动执行),而list 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文件,并尝试使“姓氏”列成为键,而每隔一行作为值(例如清单)。到目前为止,我已经为姓氏创建了一个列表,为其他行创建了该列表,但是我需要将重复名称的值连接起来。

2 个答案:

答案 0 :(得分:2)

无需使用空列表显式初始化值,请使用defaultdict

Settings.Secure.ANDROID_ID

请注意,不必像我一样强制转换为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)) ,因为dictdefaultdict的子类。我只是这样做了,所以输出将完全符合您的要求。

结果:

dict

答案 1 :(得分:0)

怎么样?

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)
相关问题