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类和继承用法实例
Jul 07 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
python psutil监控进程实例
Dec 17 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
在keras里实现自定义上采样层
Jun 28 Python
Python字节单位转换(将字节转换为K M G T)
Mar 02 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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 Try Catch异常测试
2009/03/01 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
js单例模式详解实例
2013/11/21 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Python上传package到Pypi(代码简单)
2016/02/06 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python如何实现邮件功能
2020/05/27 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
党员实事承诺书
2014/03/26 职场文书
员工自我工作评价
2015/03/06 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Python OpenCV 图像平移的实现示例
2021/06/04 Python
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
分享python函数常见关键字
2022/04/26 Python