当按键失序时比较字典列表

问题描述 投票:1回答:2

我有2个字典清单。

a = [{"name": "hello", "city": "xyz"},{"city": "rty", "name": "ert"}]
b = [{"city": "xyz","name": "hello"},{"name": "ert", "city": "rty"}]

以上两个列表相等。但是,如果我使用==进行比较,它将得到False。当键可能出现故障时,如何检查两个字典列表之间的相等性?

python python-3.x list dictionary equality
2个回答
1
投票

我很确定你以某种方式犯了一个错误。我和其他人得到True

>>> a = [{"name": "hello", "city": "xyz"},{"city": "rty", "name": "ert"}]
>>> b = [{"city": "xyz","name": "hello"},{"name": "ert", "city": "rty"}]
>>> a == b
True

这就是应该所做的。

关于OrderedDict的文档说(重点是我::)>

[OrderedDict对象与其他OrderedDict对象之间的

Equality tests

像常规字典一样,不区分顺序。]

关于Mapping的文档说了这一点,这些字典就是这种情况:

并且(且仅当它们具有相等的[[(key,value)

对时,映射(Value comparisons的实例)比较)相等。
[如果您想知道每个列表是否具有相同的字典,即使dict元素可能不在列表中的相同位置(如您提到的注释中所示,也可以使用:]]

dict

输出:

a = [{"name": "hello", "city": "xyz"},{"city": "rty", "name": "ert"}] b = [{"name": "ert", "city": "rty"}, {"city": "xyz","name": "hello"}] print(a == b) print(sorted(a, key=lambda d: sorted(d.items())) == sorted(b, key=lambda d: sorted(d.items())))


0
投票
[如果您想知道每个列表是否具有相同的字典,即使dict元素可能不在列表中的相同位置(如您提到的注释中所示,也可以使用:]]

dict

© www.soinside.com 2019 - 2024. All rights reserved.