Skip to main content
 首页 » 编程设计

python之将两个列表添加到字典中并允许合并具有相似标题的值

2025年05月04日20think

我刚刚将一些列导入到 python 中的两个列表中。我正在尝试将两个列表一起添加到字典中,并具有具有总计值的唯一对象。例如,'Apple' 和 'Apple' 将返回 'Apple': 14.0' 因为两者组合在一起。如何产生所需的输出?我是否必须向我的 for 循环添加任何内容?

listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple'] 
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0'] 
dict={} 
 
for i, x in zip((listA),(listB)): 
    dict[i]=x 

输出:

{'Apple':'9.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'1.0'} 

期望的输出:

{'Apple':'14.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'9.0'} 

请您参考如下方法:

您可以使用 collections.defaultdict()在遇到相同的键时自动添加您的值,例如:

import collections 
 
listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple'] 
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0'] 
 
result = collections.defaultdict(float) 
for k, v in zip(listA, listB): 
    result[k] += float(v) 

然而,这将产生一个带有 float 的结果,即:

{'Apple': 14.0, 'Banana': 12.0, 'Orange': 2.0, 'Pineapple': 9.0} 

如果您需要字符串结果,您可以对结果进行后处理:

result = {k: str(v) for k, v in result.iteritems()}  # Python 3.x: result.items() 
# {'Apple': '14.0', 'Banana': '12.0', 'Orange': '2.0', 'Pineapple': '9.0'} 

或者你可以在没有 collections.defaultdict() 的情况下处理整个事情:

listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple'] 
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0'] 
 
result = {} 
for k, v in zip(listA, listB): 
    result[k] = str(float(result.get(k, 0)) + float(v)) 
# {'Apple': '14.0', 'Banana': '12.0', 'Orange': '2.0', 'Pineapple': '9.0'}