我刚刚将一些列导入到 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'}
