[英]Adding values of one dictionary if the keys match the keys of the other dictionary
我是 python 的新手。 我想就字典操作寻求您的帮助。 我想,这个问题有点基本。 但是,我有点卡住了。 我需要得到 dict2 中与 dict1 中的“JJ”值相对应的值的总和。 由于dict1中的“JJ”与键“A”和“B”相关联,所以dict2中对应的值为30和100,总和为130 谢谢! Rn
我的代码(我在第 2 步之后得到 dict2=145 中所有值的总和,而不仅仅是 A+B=130)
dict1 = {"A":"JJ", "B":"JJ", "C":"X"}
dict2 = {"A":30, "B":100, "C":15}
dict3=dict()
for (kk, vv) in dict1.items():
ref_val="JJ"
if vv == ref_val:
dict3[kk] = vv
print(dict3)
total_points=0
for (kk, vv) in dict2.items():
for (kk, vv) in dict3.items():
total_points = sum(vv for vv in dict2.values())
print(total_points)
我希望我正确理解了这个问题。 我是这样,这应该工作:
dict1 = {"A": "JJ", "B": "JJ", "C": "X"}
dict2 = {"A": 30, "B": 100, "C": 15}
keys = set(k for k, v in dict1.items() if v == "JJ")
total_points = sum(dict2.get(k, 0) for k in keys)
print(total_points)
keys
: 使用列表推导选择值等于JJ
的键total_points
:与这些键对应的值是从dict2
获取并即时求和的。 如果dict2
中不存在键中的keys
(不是这种情况,顺便说一句),则取 0(零)代替(因此它不会影响总和)我喜欢另一个答案,但我可能会更笼统地解决这个问题:
from collections import defaultdict
dict1 = {"A": "JJ", "B": "JJ", "C": "X"}
dict2 = {"A": 30, "B": 100, "C": 15}
val_to_keys = defaultdict(list)
for key, val in dict1.items():
val_to_keys[val].append(dict2.get(key, 0))
# Note that now val_to_keys contains:
# {'JJ': [30, 100], 'X': [15]}
if 'JJ' in val_to_keys:
print(sum(val_to_keys['JJ'])) # 130
# or you can one line the print
print(sum(val_to_keys.get('JJ', []))) # 130
这样,您只需遍历dict1
一次,就可以提取任何您想要的值。
请注意,如果您只关心总和,那么通过在初始迭代期间计算总和会更有效。 (我在这里使用普通字典而不是默认字典,只是为了展示如何使用常规字典和默认字典来做到这一点)。
dict1 = {"A": "JJ", "B": "JJ", "C": "X"}
dict2 = {"A": 30, "B": 100, "C": 15}
val_to_keys = {}
for key, val in dict1.items():
val_to_keys[val] = val_to_keys.get(val, 0) + dict2.get(key, 0)
# Note that now val_to_keys contains:
# {'JJ': 130, 'X': 15}
if 'JJ' in val_to_keys:
print(val_to_keys['JJ']) # 130
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.