0

dict我注意到s 和OrderedDicts之间的关系存在这种惊人的不一致。从文档:

OrderedDict 对象之间的相等性测试是顺序敏感的,并且实现为list(od1.items())==list(od2.items()). 对象和其他 Mapping 对象之间的相等性测试OrderedDict与常规字典一样对顺序不敏感。这允许OrderedDict在使用常规字典的任何地方替换对象。

这是一个问题,因为它违反了 equal 的传递性,如下所示。

我的问题:这是否有充分的理由(除了“......允许 OrderedDict 对象被替换......”)?是否有任何其他标准 python 类型违反了等式的传递属性

以下测试应该都是等效的,但它们不是:

od1 = OrderedDict([(1,1), (2,2)])
od2 = OrderedDict([(2,2), (1,1)])
d = dict(od1)
d   == od1 == od2 # False
od1 == d   == od2 # True ...
od1 == od2 == d   # False

在我看来,情况应该是这样的:

  1. 集合是有序的,即 order 是其dict的一部分,在这种情况下,不应该定义与 unordered的比较(与比较 alist和 a相同set

  2. 在这种情况下,集合不是有序od1==od2的。该顺序仍然可以保持迭代,但不被视为value 的一部分。

4

0 回答 0