比较两个字典并检查有多少(键,值)对是相等的

新手上路,请多包涵

我有两本字典,但为了简单起见,我将使用这两个:

 >>> x = dict(a=1, b=2)
>>> y = dict(a=2, b=2)

现在,我想比较 --- 中的每个 key, value 对是否在 x y 具有相同的对应值。所以我写了这个:

 >>> for x_values, y_values in zip(x.iteritems(), y.iteritems()):
        if x_values == y_values:
            print 'Ok', x_values, y_values
        else:
            print 'Not', x_values, y_values

它的工作原理是返回一个 tuple 然后比较是否相等。

我的问题:

这个对吗?有没有 更好 的方法来做到这一点?最好不要速度,我说的是代码优雅。

更新:我忘了提到我必须检查有多少 key, value 对是相等的。

原文由 user225312 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 590
2 个回答

如果您想知道两个字典中有多少值匹配,您应该这么说:)

也许是这样的:

 shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
print(len(shared_items))

原文由 mouad 发布,翻译遵循 CC BY-SA 4.0 许可协议

def dict_compare(d1, d2):
    d1_keys = set(d1.keys())
    d2_keys = set(d2.keys())
    shared_keys = d1_keys.intersection(d2_keys)
    added = d1_keys - d2_keys
    removed = d2_keys - d1_keys
    modified = {o : (d1[o], d2[o]) for o in shared_keys if d1[o] != d2[o]}
    same = set(o for o in shared_keys if d1[o] == d2[o])
    return added, removed, modified, same

x = dict(a=1, b=2)
y = dict(a=2, b=2)
added, removed, modified, same = dict_compare(x, y)

原文由 Daniel Myers 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题