如何在不考虑某些键的情况下测试两个字典是否相等。例如,
equal_dicts(
{'foo':1, 'bar':2, 'x':55, 'y': 77 },
{'foo':1, 'bar':2, 'x':66, 'z': 88 },
ignore_keys=('x', 'y', 'z')
)
字符串
应该返回True。
UPD:我正在寻找一个高效、快速的解决方案。
2012.我最终得到了这段代码,它似乎是最快的:
def equal_dicts_1(a, b, ignore_keys):
ka = set(a).difference(ignore_keys)
kb = set(b).difference(ignore_keys)
return ka == kb and all(a[k] == b[k] for k in ka)
9条答案
按热度按时间wkftcu5l1#
字符串
编辑:这可能更快,更内存效率:
型
igsr9ssn2#
使用dict解析:
字符串
在Python 2上使用
.viewitems()
。cl25kdpy3#
这是另一个变体:
字符串
它的优点:
sbdsn5lh4#
如果你在测试时需要这个检查,你可以使用
unittest.mock
库中的ANY
。下面是一个例子。字符串
See more
fhg3lkii5#
非常 * 非常 * 粗糙,你可以删除任何忽略的键并比较这些字典:
字符串
(Note这里我们不需要一个深拷贝,我们只需要避免修改
d1
和d2
。hgtggwj06#
字符串
注解编辑:您可以执行类似
compare_dict(d1, d2, ignore) and compare_dict(d2, d1, ignore)
的操作或复制for
型
无论是更快和更干净!更新:铸造集(忽略)
0sgqnhkj7#
如果我们知道两个字典有相同的键:
字符串
如果我们不知道两个字典有相同的键,如果dict2有一些dict1中缺少的不可忽略的键,那么上面的方法就会失败,所以我们可以改变方法来首先检查dict2没有任何额外的键:
型
but5z9lq8#
只忽略一个密钥情况下的最优解
字符串
jjhzyzn09#
如果您的字典包含列表或其他字典:
字符串