首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个字典并检查有多少(键、值)对相等

比较两个字典并检查有多少(键、值)对相等
EN

Stack Overflow用户
提问于 2010-12-25 03:09:13
回答 25查看 638.1K关注 0票数 297

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

代码语言:javascript
运行
复制
>>> x = dict(a=1, b=2)
>>> y = dict(a=2, b=2)

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

代码语言:javascript
运行
复制
>>> 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对是相等的。

EN

回答 25

Stack Overflow用户

回答已采纳

发布于 2010-12-25 03:17:26

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

可能是这样的:

代码语言:javascript
运行
复制
shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
print len(shared_items)
票数 221
EN

Stack Overflow用户

发布于 2010-12-25 03:11:54

您想要做的只是x==y

您可能正在比较[('b',1), ('a',1)][('a',1),('b',1)] (相同的字典,不同的顺序)。

例如,请参阅以下内容:

代码语言:javascript
运行
复制
>>> 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))]

虽然只有一项不同,但算法会发现所有项都是不同的

票数 198
EN

Stack Overflow用户

发布于 2013-09-18 06:02:10

代码语言:javascript
运行
复制
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)
票数 196
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4527942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档