Python cookbook(数据结构与算法)让字典保持有序的方法


Posted in Python onFebruary 18, 2018

本文实例讲述了Python让字典保持有序的方法。分享给大家供大家参考,具体如下:

问题:创建一个字典,同时对字典做迭代或序列化操作时,也能控制其中元素的顺序;

解决方案:可以使用collections模块中的OrderedDict类来控制字典中元素的顺序。当对字典做迭代时,他会严格按照元素初始添加的顺序进行。例如:

from collections import OrderedDict
d=OrderedDict()
d['foo']=1
d['bar']=2
d['spam']=3
d['grok']=4
for key in d:
  print(key,d[key])
Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
foo 1
bar 2
spam 3
grok 4
>>>

当想构建一个映射结构以便稍后对其做序列化或编码成另一种格式时,OrderedDict就显得特别有用。

例如:若想在进行JSON编码时精确控制各字段的顺序,那么只要首先在OrderedDict中构建数据就可以了。

>>> import json
>>> d
OrderedDict([('foo', 1), ('bar', 2), ('spam', 3), ('grok', 4)])
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'
>>>

补充:OrderedDict内部维护了一个双向链表,它会根据元素加入的顺序排列键的位置。第一个新加入的元素被放置在链表的末尾,接下来对已存在的键做重新赋值不会改变键的顺序。

注意:OrderedDict的大小是普通字典的2倍,这是它额外创建的链表所致。所以在构建涉及大量数据的结构时要权衡其带来的好处与消耗的内存。

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
Python的Django框架中的数据过滤功能
Jul 17 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
Python pymongo模块常用操作分析
Sep 01 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
django页面跳转问题及注意事项
Jul 18 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
Python restful框架接口开发实现
Apr 13 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 Python
Python中super().__init__()测试以及理解
Dec 06 Python
python中的random模块和相关函数详解
Apr 22 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 #Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 #Python
python快速建立超简单的web服务器的实现方法
Feb 17 #Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 #Python
python3学习笔记之多进程分布式小例子
Feb 13 #Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 #Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 #Python
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
js 学习笔记(三)
2009/12/29 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
特步官方商城:Xtep
2017/03/21 全球购物
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
中职生自荐信
2013/10/13 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
运动会宣传口号
2014/06/09 职场文书
终止劳动合同通知书
2015/04/16 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
python 模块重载的五种方法
2021/04/24 Python
JUnit5常用注解的使用
2021/07/02 Java/Android
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python