Python 3.x 如果一个字典的键与另一个字典的键匹配,则添加该字典的值

Python 3.x 如果一个字典的键与另一个字典的键匹配,则添加该字典的值,python-3.x,Python 3.x,我是python新手。我想请求您在词典操作方面提供帮助。我想,这个问题有点基本。但是,我有点卡住了。 我需要得到dict2中与dict1中的“JJ”值相对应的值的总和。由于dict1中的“JJ”与键“A”和“B”相关联,因此dict2中的相应值为30和100,总计为130 非常感谢。 注册护士 我的代码(在第2步之后,我得到的是dict2=145中所有值的总和,而不是A+B=130) 我希望我正确理解了这个问题。 我认为,这应该是可行的: dict1={“A”:“JJ”,“B”:“JJ”,“C”

我是python新手。我想请求您在词典操作方面提供帮助。我想,这个问题有点基本。但是,我有点卡住了。 我需要得到dict2中与dict1中的“JJ”值相对应的值的总和。由于dict1中的“JJ”与键“A”和“B”相关联,因此dict2中的相应值为30和100,总计为130 非常感谢。 注册护士

我的代码(在第2步之后,我得到的是dict2=145中所有值的总和,而不是A+B=130)


我希望我正确理解了这个问题。 我认为,这应该是可行的:

dict1={“A”:“JJ”,“B”:“JJ”,“C”:“X”}
dict2={A:30,B:100,C:15}
keys=set(k代表k,v在dict1.items()中,如果v==“JJ”)
总分=总和(dict2.get(k,0)表示键中的k)
打印(总分)
  • :使用列表理解选择值等于
    JJ
    的键
  • total_points
    :这些键对应的值从
    dict2
    中提取并动态求和。如果
    keys
    中的键不在
    dict2
    中(情况并非如此,顺便说一句),则取回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
    上迭代一次,就可以提取出您想要的任何值

    请注意,如果您只关心和,那么在初始迭代期间计算和会更加有效。(我在这里使用普通dict而不是defaultdict,只是为了说明如何使用常规字典和defaultdict来实现这一点)


    @用户12361413,如果答案对你有效,你会接受正确答案吗?@ICapp只是一个提示。使用“``而不是4个空格可以更轻松地完成代码块。请看我对你的问题的编辑,以了解我的意思。(在回答问题和编写大型代码块时可以节省时间)。这两种解决方案都有效-感谢ICapp和错误-语法悔恨
    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 = {"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