- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python有序字典的两个小“惊喜”由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
从 Python 3.6 开始,常规的字典会记住其插入的顺序:就是说,当遍历字典时,你获得字典中元素的顺序跟它们插入时的顺序相同.
在 3.6 之前,字典是无序的:遍历顺序是随机的.
关于有序字典,这里有两件令人意外的事情.
1. 你无法获得第一个元素 。
由于字典中的元素具有特定的顺序,因此获取第一个(或第 N 个)元素应该很容易,对吧?
不对!没办法直接做到.
你可能会认为 d[0] 就是第一个元素,但并不是,它只是键为 0 的值,有可能是添加到字典的最后一个元素.
获得第 N 个元素的唯一方法是遍历字典,直到取得第 N 个元素。不能根据有序索引来作随机访问.
这是一处列表胜过字典的地方。获取列表的第 N 个元素是 O(1) 操作。获取字典的第 N 个元素(即使已排序)是 O(N) 操作.
2. OrderedDict 有点不同 。
由于现在的字典是有序的,collections.OrderedDict 就没用了,对吧?
(译注:3.6 版本前的 dict 是无序的,但标准库里提供了一个有序字典 OrderedDict。现在 dict 变有序了,那 OrderedDict 似乎是多余了?) 。
好像是。但是它不会被删除,因为那样会破坏正在使用它的代码,并且它还拥有一些常规字典没有的方法.
另外,它们在行为上也有细微的差别。在比较是否相等时,常规字典不会考虑顺序,但 OrderedDict 会:
>>> d1 = {"a": 1, "b": 2} 。
>>> d2 = {"b": 2, "a": 1} 。
>>> d1 == d2 。
True 。
>>> list(d1) 。
['a', 'b'] 。
>>> list(d2) 。
['b', 'a'] 。
。
>>> from collections import OrderedDict 。
>>> od1 = OrderedDict([("a", 1), ("b", 2)]) 。
>>> od2 = OrderedDict([("b", 2), ("a", 1)]) 。
>>> od1 == od2 。
False 。
>>> list(od1) 。
['a', 'b'] 。
>>> list(od2) 。
['b', 'a'] 。
>>> 。
(译文完):(https://nedbatchelder.com//blog/202010/ordered_dict_surprises.html) 。
最后此篇关于Python有序字典的两个小“惊喜”的文章就讲到这里了,如果你想了解更多关于Python有序字典的两个小“惊喜”的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
从 Python 3.6 开始,常规的字典会记住其插入的顺序:就是说,当遍历字典时,你获得字典中元素的顺序跟它们插入时的顺序相同。 在 3.6 之前,字典是无序的:遍历顺序是随机的。 关于有序字
我想创建一个非常严格的安全管理器,所以我扩展了 SecurityManager 并覆盖了所有自定义的 checkXXX 方法。 但后来我发现我的安全管理器没用,因为任何人都可以: System.set
所以我已经工作了一段时间了,似乎无法弄清楚这个该死的 ListView 业务..我让它在另一个应用程序中工作,但是当我复制粘贴时(我知道)它不起作用。所以在逛了大约6个小时后我决定来这里。 此代码执行
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我注意到 bash shell 可以为您的命令建议命令行开关。 只需键入您的命令、破折号 (-) 和制表符。 shell 将向您显示可用的开关。 例如,尝试: andy@andyx:~$ java -
这个问题在这里已经有了答案: How can I initialize a dictionary of distinct empty lists in Python? (7 个回答) 关闭2年前。 我
一个好熟人和前同事突然给我打电话,并给了我一份我真的不能忽视的契约(Contract)。他坚信我会很快掌握并掌握 C#(过去在 -> c/c++/PHP/Python/Lua 方面的经验)。 这个问题
我想在我的 Objective-C iPhone 应用程序中使用一些 C++ STL 集合。显然这可以通过给文件扩展名 ".mm"来实现。与此相关的怪癖/惊喜有哪些? 我想使用我熟悉的基本容器( ve
我正在尝试使用 scikit-surprise 模块来构建推荐系统,但是在编译它时遇到错误。 我收到 ImportError:无法导入名称“Reader”错误 我的类(class)如下 import
我是一名优秀的程序员,十分优秀!