比如说,我有两个列表:
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
