首页 > Python基础教程 > Python常见模块
阅读:12,917
Python OrderedDict用法详解
OrderedDict 也是 dict 的子类,其最大特征是,它可以“维护”添加 key-value 对的顺序。简单来说,就是先添加的 key-value 对排在前面,后添加的 key-value 对排在后面。
由于 OrderedDict 能维护 key-value 对的添加顺序,因此即使两个 OrderedDict 中的 key-value 对完全相同,但只要它们的顺序不同,程序在判断它们是否相等时也依然会返回 false。
例如如下程序:
运行上面程序,可以看到如下输出结果:
此外,由于 OrderedDict 是有序的,因此 Python 为之提供了如下两个方法:
下面程序示范了 OrderedDict 的两个方法的用法:
由于 OrderedDict 能维护 key-value 对的添加顺序,因此即使两个 OrderedDict 中的 key-value 对完全相同,但只要它们的顺序不同,程序在判断它们是否相等时也依然会返回 false。
例如如下程序:
from collections import OrderedDict # 创建OrderedDict对象 dx = OrderedDict(b=5, c=2, a=7) print(dx) # OrderedDict([('b', 5), ('c', 2), ('a', 7)]) d = OrderedDict() # 向OrderedDict中添加key-value对 d['Python'] = 89 d['Swift'] = 92 d['Kotlin'] = 97 d['Go'] = 87 # 遍历OrderedDict的key-value对 for k,v in d.items(): print(k, v)上面程序首先创建了 OrderedDict 对象,接下来程序向其中添加了 4 个 key-value 对,OrderedDict 完全可以“记住”它们的添加顺序。运行该程序,可以看到如下输出结果:
OrderedDict([('b', 5), ('c', 2), ('a', 7)])
Python 89
Swift 92
Kotlin 97
Go 87
# 创建普通的dict对象 my_data = {'Python': 20, 'Swift':32, 'Kotlin': 43, 'Go': 25} # 创建基于key排序的OrderedDict d1 = OrderedDict(sorted(my_data.items(), key=lambda t: t[0])) # 创建基于value排序的OrderedDict d2 = OrderedDict(sorted(my_data.items(), key=lambda t: t[1])) print(d1) # OrderedDict([('Go', 25), ('Kotlin', 43), ('Python', 20), ('Swift', 32)]) print(d2) # OrderedDict([('Python', 20), ('Go', 25), ('Swift', 32), ('Kotlin', 43)]) print(d1 == d2) # False上面程序先创建了一个普通的 dict 对象,该对象中包含 4 个 key-value 对;接下来程序分别使用 sorted() 函数对 my_data(dict 对象)的 items 进行排序:d1 是按 key 排序的;d2 是按 value 排序的,这样得到的 d1、d2 两个 OrderedDict 中的 key-value 对是一样的,只不过顺序不同。
运行上面程序,可以看到如下输出结果:
OrderedDict([('Go', 25), ('Kotlin', 43), ('Python', 20), ('Swift', 32)])
OrderedDict([('Python', 20), ('Go', 25), ('Swift', 32), ('Kotlin', 43)])
False
此外,由于 OrderedDict 是有序的,因此 Python 为之提供了如下两个方法:
- popitem(last=True):默认弹出并返回最右边(最后加入)的 key-value 对;如果将 last 参数设为 False,则弹出并返回最左边(最先加入)的 key-value 对。
- move_to_end(key, last=True):默认将指定的 key-value 对移动到最右边(最后加入);如果将 last 改为 False,则将指定的 key-value 对移动到最左边(最先加入)。
下面程序示范了 OrderedDict 的两个方法的用法:
from collections import OrderedDict d = OrderedDict.fromkeys('abcde') # 将b对应的key-value对移动到最右边(最后加入) d.move_to_end('b') print(d.keys()) # odict_keys(['a', 'c', 'd', 'e', 'b']) # 将b对应的key-value对移动到最左边(最先加入) d.move_to_end('b', last=False) print(d.keys()) # odict_keys(['b', 'a', 'c', 'd', 'e']) # 弹出并返回最右边(最后加入)的key-value对 print(d.popitem()[0]) # e # 弹出并返回最左边(最先加入)的key-value对 print(d.popitem(last=False)[0]) # b运行上面程序,可以看到如下输出结果:
odict_keys(['a', 'c', 'd', 'e', 'b'])
odict_keys(['b', 'a', 'c', 'd', 'e'])
e
b
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频