看起来像
OrderedDict将各种视图对象的实现委托给通用
dict实现;即使在
OrderedDict获得3.5的C加速实现的Python
3.5中,情况仍然如此(它将对象构造委托给
_PyDictView_New通用视图的丰富比较功能,并且不提供任何替代。
基本上,
OrderedDict视图以其支持的顺序进行迭代
OrderedDict(因为这样做没有成本),但是对于
set类似的 *** 作,它们的行为类似于
set,使用内容相等性,子集/超集检查等。
这使得在某种程度上忽略顺序的选择变得有意义。对于某些
set*** 作(例如
&,
|,
^),返回值是一个
set无秩序(因为没有
OrderedSet,即使有,你用的东西,像它的排序
&,其中排序可以在每个视图?是不同的),你”如果某些
set类似于 *** 作的 *** 作对顺序敏感,而某些则不是,则将获得不一致的行为。当两个
OrderedDict关键视图对顺序敏感时,甚至将
OrderedDict视图与
dict视图进行比较时,这将变得更加奇怪。
正如我在评论中指出的,您可以使用以下命令
keys轻松获得订单敏感的比较:
from operator import eq# Verify that keys are the same length and same set of values first for speed# The `all` check then verifies that the known identical keys appear in the# same order.xy.keys() == yx.keys() and all(map(eq, xy, yx))# If you expect equality to occur more often than not, you can save a little# work in the "are equal" case in exchange for costing a little time in the# "not even equal ignoring order case" by only checking length, not keys equality:len(xy) == len(yz) and all(map(eq, xy, yx))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)