Python 若一个字典的值和第二个字典的键相同,则将第二个字典的值相加

Python 若一个字典的值和第二个字典的键相同,则将第二个字典的值相加,python,dictionary,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 提前感谢您可以检查第一个字典中某个键的列表中的值是否作为第二个字典中的键存在,然后您可以使用列表理解和求和函数来完成这项工作。类似于此: A = {"Mark&qu

我想根据第一个字典对第二个字典的值求和。如果我有字典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

提前感谢

您可以检查第一个字典中某个键的列表中的值是否作为第二个字典中的键存在,然后您可以使用
列表理解
求和
函数来完成这项工作。类似于此:

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())

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

您可以这样做:

对于键,A.items()中的值:
_总和=0
对于val值:
_总和+=B[val]
打印(键“=”,_sum)
输出:

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

我觉得你的问题很有意思,如果你觉得我的答案有益,请回顾一下

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)))
输出:

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

您可以使用嵌套列表:

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()}

列表
理解可以替换为
生成器
理解,这对于大型数据集更有效。当将生成器理解传递给
求和
函数时,您甚至可以省略生成器括号。谢谢大家。这些都很有帮助。另一个问题是,如果有另一个键A={“Mark”:[“A”,“b”,“c”,“d”],“June”:[“e”,“A”],“John”:[“A”,“b”,“f”],“Mary”:[“w”}在另一个字典中没有任何值,我该如何从这两个字典创建新的字典。在新字典中,这应该被忽略,只报告Mark:6月6日:4约翰:5