压缩相似的键以构建字典时如何求和

时间:2019-03-13 12:23:30

标签: python python-3.x

我有A = [a, b, c, d, a, d, c]B=[1, 2, 3, 4, 5, 6, 7]

为什么dict(zip(A,B))不返回{'a': 6, 'b': 2, 'c': 10, 'd': 10}

如何使其起作用?

2 个答案:

答案 0 :(得分:2)

使用简单的迭代

例如:

A = ["a", "b", "c", "d", "a", "d", "c"] 
B= [1, 2, 3, 4, 5, 6, 7]

result = {}
for a, b in zip(A, B):
    if a not in result:
        result[a] = 0
    result[a] += b
print(result)

或使用collections.defaultdict

例如:

from collections import defaultdict
result = defaultdict(int)
for a, b in zip(A, B):
    result[a] += b
pprint(result)

输出:

{'a': 6, 'b': 2, 'c': 10, 'd': 10}

答案 1 :(得分:1)

dict只会覆盖这些值。.您想要的东西不会那么容易。您需要这样的东西:

#!/usr/bin/env python3
from collections import defaultdict

A = ["a", "b", "c", "d", "a", "d", "c"]
B = [1, 2, 3, 4, 5, 6, 7]

output = defaultdict(int)

for a,b in zip(A,B):
        output[a] += b

print(output)

结果:

defaultdict(<class 'int'>, {'a': 6, 'b': 2, 'c': 10, 'd': 10})

defaultdict将默认情况下将每个新键值设置为0。允许我们对每个键调用+=而不会出错。给我们所需的总和。