【问题标题】:Only compare values of matching keys in two dictionaries in python仅比较python中两个字典中匹配键的值
【发布时间】:2017-02-17 17:12:31
【问题描述】:

最简单的比较方式是什么:

dict1 = {'Class1': 10, 'Class2': 18, 'Class3': 5}
dict2 = {'Class1': 10, 'Class2': 18, 'Class4': 11}

for key in dict1:
    for key2 in dict2:
        if key == key2:
            self.assertEqual(dict1[key], dict2[key2])

我觉得我做一个嵌套 for 循环来比较所有 dict2 键与 dict1 中的每个键的解决方案效率低下。目标是仅比较 dict1 和 dict2 都具有的键的值。

【问题讨论】:

  • 你没有告诉我们你想要的输出是什么。我们是否只比较相等,即你的结果是一个巨大的布尔值(“全相等”),或者布尔值的字典?还是数字差异的字典?还是什么?
  • 您的解决方案是什么?你认为这是低效的。
  • 对不起,我添加了一个例子来更清楚
  • @JackLiaiea 请不要在您的问题中添加答案。如果您有单独的答案,只需将其作为另一个答案发布(或者更好的 accept 或投票给答案)!

标签: python dictionary for-loop


【解决方案1】:

你可以得到关键的交集进行迭代和比较

dict1.keys() & dict2.keys()

例如,

>>> {k: (dict1[k], dict2[k]) for k in dict1.keys() & dict2.keys()}
{'Class1': (10, 10), 'Class2': (18, 18)}

# or 

>>> for k in dict1.keys() & dict2.keys():
        print(dict1[k], dict2[k])

18 18
10 10

【讨论】:

    【解决方案2】:

    基于@Mitch 的回答,您可以在all 中比较它们:

    dict1 = {'Class1': 10, 'Class2': 18, 'Class3': 5}
    dict2 = {'Class1': 10, 'Class2': 18, 'Class4': 11}
    all(dict1[k] == dict2[k] for k in dict1.keys() & dict2.keys())
    

    或者在你的情况下:

    self.assertTrue(all(dict1[k] == dict2[k] for k in dict1.keys() & dict2.keys()))
    

    【讨论】:

    • 是的,我不确定 OP 在编辑之前实际上想要做什么,但这很好!
    猜你喜欢
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多