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生成指定长度的随机数密码
Jan 23 Python
Python CSV模块使用实例
Apr 09 Python
Python环境变量设置方法
Aug 28 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python的re模块使用方法详解
Jul 26 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Python坐标线性插值应用实现
Nov 13 Python
python实现QQ邮箱发送邮件
Mar 06 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
python中wx模块的具体使用方法
May 15 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
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP对象实例化单例方法
2017/01/19 PHP
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python数据库小程序源代码
2019/09/15 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
奥巴马演讲稿
2014/01/08 职场文书
银行办公室岗位职责
2014/03/10 职场文书
预备党员的自我评价
2014/03/12 职场文书
婚内房产协议书范本
2014/10/02 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫