如果一个字典的值与第二个字典的键相同,则总和第二个字典值 Python

时间:2021-03-19 05:14:47

标签: python dictionary

我想根据第一个字典对第二个字典的值求和。如果我有字典 A 和 B。

A = {"Mark": ["a", "b", "c", "d"], "June": ["e", "a"], "John": ["a", "b", "f"]}
B = {"a": 1, "b": 2, "c": 3, "d": 0, "e": 3, "f": 2}

结果应该是:

Mark=6, June = 4, John = 5

提前致谢

4 个答案:

答案 0 :(得分:2)

您可以检查第一个字典列表中某个键的值是否作为第二个字典中的键存在,然后您可以使用 list comprehensionsum 函数来完成工作。类似的东西:

A = {"Mark":["a", "b", "c", "d"], "June":["e", "a"], "John":["a", "b", "f"]}
B = {'a':1, 'b':2, 'c':3, 'd':0, 'e':3, 'f':2}
for k,v in A.items():
    total = sum([B[eachV] for eachV in v if eachV in B.keys()])
    print(f'{k}: {total}')
    
Mark: 6
June: 4
John: 5

更新: 指点:@Mushif Ali Nawaz

如果您的数据会更大,您可以考虑使用生成器推导而不是列表推导,因为它更快..

total = sum(B[eachV] for eachV in v if eachV in B.keys())

当方括号被括号替换时,列表理解会更改为生成器理解。

答案 1 :(得分:2)

你可以这样做:

for key, value in A.items():
    _sum = 0
    for val in value:
        _sum += B[val]
    print(key, '=', _sum)

输出:

Mark = 6
June = 4
John = 5

答案 2 :(得分:0)

我发现您的问题很有趣,如果您觉得有用,请查看我的回答。

A = {"Mark":["a", "b", "c", "d"], "June":["e", "a"], "John":["a", "b", "f"]}
B = {"a":1, "b":2, "c":3, "d":0, "e":3, "f":2}



result_list = []

for i in A.keys():
    result = 0
    for j in A.get(i):
        result = result + B.get(j)
    result_list.append(result)

print("final result  = ",dict(zip(A.keys(), result_list)))

输出:

final result  =  {'Mark': 6, 'June': 4, 'John': 5}

答案 3 :(得分:0)

您可以使用嵌套列表理解:

A = {"Mark": ["a", "b", "c", "d"], "June": ["e", "a"], "John": ["a", "b", "f"]}
B = {"a": 1, "b": 2, "c": 3, "d": 0, "e": 3, "f": 2}
r = {a:sum(B[i] for i in b) for a, b in A.items()}