如果键与另一本词典的键匹配,则添加一个词典的值

时间:2019-11-12 14:25:11

标签: python-3.x

我是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)

2 个答案:

答案 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)
  1. keys:使用列表理解,选择值等于JJ的键
  2. 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