为什么OrderedDict键视图比较不区分顺序的?

为什么OrderedDict键视图比较不区分顺序的?,第1张

为什么OrderedDict键视图比较不区分顺序的?

看起来像

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))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5566043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存