栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么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))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号