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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
详解python运行三种方式
May 13 Python
python sqlite的Row对象操作示例
Sep 11 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
如何用Python徒手写线性回归
Jan 25 Python
Python 使用dict实现switch的操作
Apr 07 Python
Python echarts实现数据可视化实例详解
Mar 03 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使用eAccelerator的API开发详解
2013/06/09 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php定时执行任务设置详解
2015/02/06 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
js常用代码段整理
2011/11/30 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
百度地图api如何使用
2015/08/03 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python求众数问题实例
2014/09/26 Python
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
在python image 中实现安装中文字体
2020/05/16 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
电脑教师的教学自我评价
2013/11/26 职场文书
七年级数学教学反思
2014/01/22 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
意向协议书
2015/01/27 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python