我是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)
答案 0 :(得分:2)
我希望我正确理解了这个问题。 我这样,这应该可以工作:
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
中提取并即时求和的。如果keys
中不存在来自dict2
的密钥(不是这种情况,则顺便说一句)取而代之的是0(零)(这样就不会影响总和)答案 1 :(得分: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
一次,就可以提取所需的任何值。
请注意,如果您只关心总和,则可以通过在初始迭代期间计算总和来提高效率。 (我在这里使用普通字典而不是defaultdict只是为了展示如何使用常规字典和defaultdict来做到这一点。)
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