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

2024-04-18 14:27:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两本词典,但为了简化起见,我要这两本:

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

现在,我想比较x中的每个key, value对在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是相等的。


Tags: keyinforifvaluenotokzip
3条回答
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)

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

可能是这样的:

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

你想做的只是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))]

区别只是一个项目,但是你的算法会发现所有的项目都是不同的

相关问题 更多 >