字典与列表自定义相等检查

inq*_*ive 1 python pytest python-3.x

说,我有两个清单:

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代码?

Sun*_*tha 6

sort如果它是类型的dict中的每个元素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
Run Code Online (Sandbox Code Playgroud)

  • @timgeb和列表可能包含重复项(哪些不能) (4认同)
  • @timgeb.我更喜欢`sorted`,因为列表可能包含不可用的元素 (3认同)