为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2019-08-06 15:42:11
比较两个词典并检查有多少(键,值)对是相等的我有两个词典,但为了简化,我将采用这两个:>>> 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对是相等的。
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果你想知道两个词典中有多少个值匹配,你应该说:)

也许是这样的:

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


查看完整回答
反对 回复 2019-08-06
?
月关宝盒

TA贡献1772条经验 获得超5个赞

你想做的只是简单 x==y


你做的不是一个好主意,因为字典中的项目不应该有任何顺序。您可能正在[('a',1),('b',1)]与[('b',1), ('a',1)](相同的词典,不同的顺序)进行比较。


例如,看到这个:


>>> x = dict(a=2, b=2,c=3, d=4)

>>> x

{'a': 2, 'c': 3, 'b': 2, 'd': 4}

>>> y = dict(b=2,c=3, d=4)

>>> y

{'c': 3, 'b': 2, 'd': 4}

>>> zip(x.iteritems(), y.iteritems())

[(('a', 2), ('c', 3)), (('c', 3), ('b', 2)), (('b', 2), ('d', 4))]

差异只是一个项目,但您的算法将看到所有项目都不同


查看完整回答
反对 回复 2019-08-06
?
弑天下

TA贡献1818条经验 获得超7个赞

def dict_compare(d1, d2):
    d1_keys = set(d1.keys())
    d2_keys = set(d2.keys())
    intersect_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 intersect_keys if d1[o] != d2[o]}
    same = set(o for o in intersect_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)


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 579 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信