导航:首页 > 编程语言 > python中有序字典

python中有序字典

发布时间:2025-03-04 10:19:09

python中的OrderedDict与dict:适合工作的工具--第二篇

Python入门 OrderedDict

OrderedDict 是 Python 中的一个字典子类,它保留了键值对插入的顺序。在进行迭代时,会按照原始顺序遍历所有项目。如果更新现有键的值,顺序保持不变;如果删除项目并重新插入,则该项目将添加到字典末尾。

作为字典子类,OrderedDict 继承了常规字典的所有方法。此外,它还具有其他功能,将在后续教程中介绍。在此节中,将学习如何在代码中创建和使用有序字典。

创建有序字典对象

创建有序字典对象的第一步是从 collections 模块导入类。有几种创建有序字典的方法,与创建常规字典对象的方式相似。例如,可以通过实例化不带参数的类来创建一个空的对象:

创建一个空的有序字典,无需向构造函数提供参数。

通过在方括号([])中提供键并将值分配给该键,可以将键值对添加到字典中。引用时,将获得一个迭代的键值对,这些键值对按插入到字典中的顺序保存项目。

还可以将项目的可迭代项作为参数传递给构造函数:

当使用序列时,所得有序字典中各项的顺序与输入序列中各项的原始顺序匹配。如果使用列表、元组或集合,则创建之前项的最终顺序是未知的。

如果您使用常规字典作为有序字典对象的初始化程序,并且使用的是 Python 3.6 或更高版本,则会遵循以下行为:

有序字典中的项目顺序与原始字典中的顺序匹配。另一方面,如果使用的 Python 版本低于 3.6,则项目顺序是未知的。

从 Python 3.6 开始,函数保留调用中传递的关键字参数的顺序。因此,有序字典中各项的顺序与将关键字参数传递给构造函数的顺序匹配。在早期版本中,该顺序是未知的。

最后,有序字典还提供了 fromkeys() 方法,可以从可迭代的键创建一个新的字典,并将所有值设置为一个公共值:

使用键列表作为起点创建有序字典。第二个参数提供单个值给字典中的所有项目。

管理物品有序字典

由于有序字典是可变数据结构,因此可以对其实例执行变异操作。可以插入新项目、更新和删除现有项目等。如果将新项目插入现有的有序字典中,则项目将添加到词典末尾。

删除一个项目并插入同一项目的新实例,则新项目将添加到基础词典的末尾。

重新分配或更新有序字典对象中现有键值对的值,则键将保持其位置但会获得新值。同样,如果使用 .update() 方法修改现有键值对的值,则字典会记住键的位置并为其分配更新后的值。

遍历有序字典

就像一般的字典一样,可以使用多种工具和技术迭代有序字典的对象。可以直接按键迭代,或者使用字典的方法,如 .items()、.keys() 和 .values():

第一个 for 循环直接遍历键的键。其他三个循环使用字典方法遍历的项目、键和值。

以相反的顺序迭代 reversed()

自 Python 3.5 以来,有序字典支持使用 reversed() 进行反向迭代。此功能已添加到 Python 3.8 的常规字典中。因此,如果代码使用它,则后向兼容性受到常规字典的更多限制。

可以使用 reversed() 对有序字典的项目、键和值进行反向迭代:

本示例中的每个循环都用于 reversed() 以相反的顺序遍历有序字典的不同元素。

常规字典还支持反向迭代。但在低于 3.8 的 Python 版本中尝试使用常规 dict 对象的 reversed() 会得到 TypeError:

如果需要以相反的顺序遍历字典中的项目,那么有序字典是一个很好的选择。使用常规字典会降低后向兼容性,因为直到 Python 3.8 才将反向迭代添加到常规字典中。

Ⅱ Python中list,tuple,dict,set的区别和用法

python中list,tuple,dict,set是最常用的集合类型。

list列表,相当于一个数组,不过list的长度是自动变化的而且列表元素自由的,不必每个元素都是同一种类型。它的简洁的定义方式是a=[]。有序组合

tuple也是一个组合。不过tuple在定义好之后就不能再变化。它的简洁的定义方式是a=1,3也可以是a=(1,3).有序组合。

dict是字典类型。也就是键值对类型。键名不可以重复,并且不可以变化(字符串就符合这个要求,常用字符串作为键名)。它的简洁的定义方式是a={}.无序组合(意思就是你无法按照添加的顺序对他进行遍历)。

set是set类型(不好翻译,用的也少)。也是一个无序的组合,元素是互斥的,也就不会出现相同的元素。可以把一个序列转换成无重复元素的set.无序组合。

以下是使用的示例代码。

a_tuple=(1,3423,'34')
a_list=[12,12.34,'sds']
a_dict={'key1':1,'key2':2}
a_set=set('2323')
fortina_tuple:
print('%sintuple'%t)
print('*'*10)
forlina_list:
print('%sinlist'%l)
print('*'*10)
fork,vina_dict.items():
print('key=%s,value=%sindict'%(k,v))
print('*'*10)
forsina_set:
print('%sinset'%s)
print('*'*10)

不明白可追问。

Ⅲ python字典是否有序

默认情况下Python的字典输出顺序是按照键的创建顺序。

字典的无序是指,不能人为重新排序。
比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。
你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。

而且这个输出顺序是也不是能真正按照创建顺序可以控的。
这里面有两个影响因素:
(1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。
(2)字典空间扩容,当键的数量超过字典默认开的空间时,字典会做空间扩容,扩容后的键顺和创建顺序就会发生变化,不受人为控制。

阅读全文

与python中有序字典相关的资料

热点内容
安卓手机推荐什么键位 浏览:112
android登录验证码 浏览:474
联通云服务器管理账号 浏览:309
苹果7加密芯片坏了 浏览:514
压缩包2g解压后有多大 浏览:954
php人才管理系统 浏览:19
宏命令结构 浏览:898
为什么安卓手机开淘宝会卡 浏览:934
启迪人生编程教程 浏览:294
intouch正在编译无法打开 浏览:835
什么编译器适合做网页 浏览:850
如何破解腾讯服务器 浏览:87
嵌入式能编译文件的权限 浏览:12
轿车空调压缩机突然怎么不工作了 浏览:432
dd命令怎么解压 浏览:397
旧版安卓怎么开锁 浏览:247
开发程序员推荐 浏览:263
企信如何禁止访问其他app 浏览:71
程序员办公本推荐2019 浏览:197
手机qq下载app在哪里 浏览:536