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 dict remove数组删除(del,pop)
Mar 24 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
详解Python迭代和迭代器
Mar 28 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Python实现最大子序和的方法示例
Jul 05 Python
python求绝对值的三种方法小结
Dec 04 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
Django设置Postgresql的操作
May 14 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
python图像处理 PIL Image操作实例
Apr 09 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基础知识:类与对象(1)
2006/12/13 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
js比较日期大小的方法
2015/05/12 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python函数返回多个值的示例方法
2013/12/04 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
快速查询Python文档方法分享
2017/12/27 Python
Linux下多个Python版本安装教程
2018/08/15 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
python实现简单文件读写函数
2021/02/25 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
美德少年事迹材料
2014/01/23 职场文书
高校教师自荐信范文
2014/03/13 职场文书
高中家长寄语
2014/04/02 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
二年级数学教学反思
2016/02/16 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python