Python有序字典的两个小“惊喜”~~

香菱
• 阅读 797

从 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']
>>>

以上就是本次分享的所有内容,想要了解更多 python 知识欢迎前往公众号:Python 编程学习圈 ,发送 “J” 即可免费获取,每日干货分享
Python有序字典的两个小“惊喜”~~

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4年前
小白建议收藏,python20条非常实用的代码
Python一直以来被诟病速度慢,影响开发效率,希望这次Guido老爷子能帮python打一场漂亮的翻身仗。这篇文章不准备介绍Python速度如何,而是给大家带来一些常用且实用的Python代码实例,几乎是开发者必备的知识点。1、合并两个字典Python3.5之后,合并字典变得容易起来。我们可以通过符号解压字典,并将多个字典传入中,实现合并。defMerg
CuterCorley CuterCorley
4年前
Python 字典 使用技巧
1.遍历字典的3种方式Python3中:pythond{'x':1,'y':2,'z':3}1.遍历keys:pythonforkind:print(k)print(dkey)或者pythonforkind.keys():print(k)print(dkey)2.遍历val
Karen110 Karen110
3年前
如何来理解Python中的字典数据类型
大家好,我是IT共享者,人称皮皮。今天给大家讲解下Python中的字典数据类型。一、前言字典是Python中的数据类型,可让将数据存储在键/值对中。二、什么是字典理解?字典理解是创建字典的一种优雅简洁的方法。字典理解优化使用字典理解优化函数。例:字典理解例:squaredictnum:numnumfornuminrange(1,1
Python进阶者 Python进阶者
3年前
如何来理解Python中的字典数据类型
大家好,我是IT共享者,人称皮皮。今天给大家讲解下Python中的字典数据类型。一、前言字典是Python中的数据类型,可让将数据存储在键/值对中。二、什么是字典理解?字典理解是创建字典的一种优雅简洁的方法。字典理解优化使用字典理解优化函数。例:字典理解例:squaredictnum:numnumfornuminrange(1,11)
梦想橡皮擦 梦想橡皮擦
4年前
7. ✎会查新华字典不?会。Python字典已经掌握了
学编程要简单、粗暴。更要有效,很多时候学的越多,忘得越快。但编程总有那么一天顿悟的时候,而顿悟的契机目前就是建立在你跟橡皮擦坚持打卡100天,在评论区坚持跟橡皮擦卡学习的朋友,在100天之后,橡皮擦将送出神秘大奖。七、查字典怎么查,Python字典就怎么用已经学完了列表与元组,那这两个都是按照顺序排列的,所以可以用索引取到值,本篇博
陈占占 陈占占
3年前
python 字典
字典(dict):以键值对的方式存在,以大括号为标志、在字典里面键是不能修改的,值可以修改语法格式:字典名{key1:value1,key2:value2,.......}note:是无序的类型,建必须唯一,值不必。索引是以键为下标,不能索引键对应的值,键不能为列表特点:1.键值之间必须用冒号(:)隔开2.项与项之间必须用逗号(,)隔开3.字典中的键必须
Stella981 Stella981
3年前
Python之dict详解
Python字典是另一种可变容器模型(无序),且可存储任意类型对象,如字符串、数字、元组等其他容器模型。本次主要介绍Python中字典(Dict)的详解操作方法,包含创建、访问、删除、其它操作等,需要的朋友可以参考下。字典由键和对应值成对组成。字典也被称作关联数组或哈希表。基本语法如下:1.创建字典1234567\
Stella981 Stella981
3年前
Redis
Redis集合包括Set(无序集合)和ZSet(有序集合),这里的Set实现相当于Java中的HashSet,它内部实现了一个特殊的字典,字典中所有的value都是一个值NULL。下面我们来熟悉下set的常用的命令Setsadd namehelloZSetzset是一个有序集合,他有着java里的Sor
菜园前端 菜园前端
2年前
什么是字典?
原文链接:什么是字典?与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。在ES6中新增了Map字典。实现功能delete删除元素clear清空所有元素set添加/覆盖元素get查找/返回元素的值has判断是否包含某个元素应用场景1.
小万哥 小万哥
1年前
Python 元组完全指南1
元组用于在单个变量中存储多个项目。mytuple("apple","banana","cherry")元组是Python中的4种内置数据类型之一,用于存储数据集合,另外还有列表、集合和字典,它们都具有不同的特性和用途。元组是有序且不可更改的集合。元组使用圆
小万哥 小万哥
1年前
Python - 字典1
字典用于存储键值对形式的数据。字典是一个有序、可更改的集合,不允许重复。从Python3.7版本开始,字典是有序的。在Python3.6及更早版本中,字典是无序的。字典用花括号编写,具有键和值:示例,创建并打印一个字典:Pythonthisdict"bra
香菱
香菱
Lv1
你若化成风,我便化成雨,爱所在眉间,似水往昔流年。
文章
3
粉丝
0
获赞
0