Skip to main content
 首页 » 编程设计

python之带有列表的字典自定义相等性检查

2025年05月04日11lexus

比如说,我有两个列表:

a = [1,2,3] 和 b = [2,3,1]

如果我执行 a == b 它返回 False,

如果我检查 sorted(a) == sorted(b),它返回 True。

现在,我有两个对象:

obj1 = {'a': 1, 'b': 2, 'c': [1, 2]} 和 obj2 = {'b': 2, 'a': 1, 'c': [1, 2]}

obj1 == obj2 为真,与键的顺序无关。

但是如果 obj2 = {'b': 2, 'a': 1, 'c': [2, 1]}

如何测试相等性?显然,obj1 == obj2 返回 False。 sorted(obj1) 将有 ['a', 'b', 'c'],所以 sorted(obj1) == sorted(obj2) 是一种浪费检查。

我可能应该重写对象的相等方法,或者使用一些库。是否有任何方法可以编写惯用的 python 代码来实现深度平等?

请您参考如下方法:

排序字典中的每个元素如果是list类型然后比较

>>> def sorted_element_dict(d): 
...     return {k:sorted(v) if isinstance(v, list) else v for k,v in d.items()} 
... 
>>> sorted_element_dict(obj1) == sorted_element_dict(obj2) 
True