Python - 将2个列表合并到字典中

时间:2017-11-06 05:32:54

标签: python list dictionary merge

例如

a = [a,b,c,d,a,b,c,d]
b = [1,2,3,4,5,6,7,8]

输出应该是一个字典,如下所示:

{'a':6, 'b':8, 'c':10, 'd':12}

我尝试使用zip,但它只是覆盖了值。

3 个答案:

答案 0 :(得分:3)

我相信你想要这个:

from collections import defaultdict

a = list("abcdabcd")
b = [1,2,3,4,5,6,7,8]

d = defaultdict(int)
for key, val in zip(a,b):
    d[key] += val

答案 1 :(得分:2)

您似乎想要相应数字的总和作为您的值。

我建议您使用collections.defaultdict管理您的唯一密钥,并自行实施汇总:

import collections

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

result = collections.defaultdict(int)

for k,v in zip(a,b):
    result[k] += v

当您查找字典中尚不存在的键时,defaultdict(int)将创建一个没有初始值的整数(默认情况下为' 0')。因此,对于每个键,您将获得0 +值+值...,这似乎是您正在寻找的。

答案 2 :(得分:0)

如果你想尝试没有默认字典,这是食谱:

a = "abcdabcd"
b = [1,2,3,4,5,6,7,8]

no_dublicate={}
for item in zip(list(a),b):
    if item[0] not in no_dublicate:
        no_dublicate[item[0]]=[item[1]]
    else:
        for key,value in no_dublicate.items():
            if value==no_dublicate[item[0]]:
                no_dublicate[item[0]]=item[1]+int("".join(str(x) for x in value))

print(no_dublicate)

输出:

{'d': 12, 'c': 10, 'a': 6, 'b': 8}