python 字典添加元素乱序了_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)
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0
python 字典添加元素乱序了_Python有序字典的两个小“惊喜”相关推荐
- python字典是无序的吗_Python 有序字典 OrderedDict 和无序字典 Dict
Python 默认的字典是无序的,如果我们需要让他变成有序,很简单,使用有序字典即可,会按照添加顺序自动排序,先添加的在前面,后添加的在后面.Python 中有一个 OrderedDict,刚好就是实 ...
- python dataframe 合并乱序列表_Python数据处理--删除重复项、数值替换和表合并
导入需要的包:numpy.pandas import numpy as py import pandas as pd 创建一个表: df = pd.DataFrame({"id": ...
- python升序和降序排序_python中序列的排序,包括字典排序、列表排序、升序、降序、逆序...
一.基础概念 我们知道python中的内建序列包括字典.列表.元组.字符串等,序列是python中最基本的数据结构. 列表.元组.字符串这类的序列的索引默认第一个元素的索引从0开始,第二个元素的索引是 ...
- 解决python读取文件乱序的问题
在使用python批量读取文件,会存在文件乱序的情况,因为只有数字进行排序,当文件名中出现字母或者下划线时,读取的顺序就会被打乱,这时需要自己排好文件顺序. if __name__ == '__mai ...
- python 获取 字典中的指定键_python中字典方法的详细教程
上篇文章讲到了python字典的基础知识,今天继续python中哈希(字典的应用)方法的应用. 前章回顾: python字典的应用及案例分析 字典方法: dict.clear() 删出字典内所有的元素 ...
- python映射类型是什么意思_Python中字典映射类型的学习教程
字典是python语言中唯一的映射类型,用花括号{}表示,一个字典条目就是一个键值对,方法keys()返回字典的键列表,values()返回字典的值列表,items()返回字典的键值对列表.字典中的值 ...
- python字典按value逆序排序_python 对字典按照value进行排序的方法
字典按照value进行排序共有三种方法 d = {'a': 1, 'b': 4, 'c': 2, 'f' : 12} # 第一种方法,key使用lambda匿名函数取value进行排序 a = sor ...
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- python中列表字典元组之间的区别_python之字典、元组、列表的区别
1.列表:专门用于存储一串信息,列表用中括号[]定义,数据之间使用逗号,分隔 list_0=['a','b','c'] 列表的特点: 1)可修改.可增加.可删除 2)列表是有序的,可以遍历 3)可以将 ...
最新文章
- 【特征】机器学习之特征优选
- 使用 .NET 升级助手将.NET Framework应用迁移到.NET 5
- 解决html2canvas截取页面部分div黑屏问题
- amp mysql升级_【简单的案例分享,停机10分钟】10204升级CRSamp;amp;DB的PSU至1
- 一文轻松搞懂-条件随机场CRF
- 使用 Blueprint 要注意 render_template 函数
- DirectSound---输出设备基本操作(枚举、查询等)
- php网页象棋源码,JS小游戏之象棋暗棋源码详解_javascript技巧
- 微信名片、公众号二维码美化生成器!
- 微信联盟链接不到服务器怎么,LOL微信登不上去怎么办?微信登不上解决方法推荐...
- 无人驾驶感知篇之传感器标定(二)
- 偷偷告诉你中国小姐姐的真实Size!!
- 如何设置等高线坐标系并输出
- request.getParameter()等类似概念理解
- ubuntu 安装依赖包时出现The following packages have unmet dependencies:
- linux环境怎么更新离线rpm包,SUSE Linux 11系统rpm包离线安装GCC
- windows服务器dmp文件分析,如何用WinDbg分析MEMORY.DMP文件
- python动态横道图_用Python pyecharts v1.x 绘制图形【转】
- 深入理解MVC和jstl
- 【社会工程学】Social Engineering Toolkit工具实践与简要说明