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数据类型详解(二)列表
May 08 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
Python代码实现KNN算法
Dec 20 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
对django中foreignkey的简单使用详解
Jul 28 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 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
第一个无线电台是由谁发明的
2021/03/01 无线电
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
心扬JS分页函数代码
2010/09/10 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
vue 项目地址去掉 #的方法
2018/10/20 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
python开发中range()函数用法实例分析
2015/11/12 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Python 发送邮件方法总结
2020/08/10 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
Ajax和javascript的区别
2013/07/20 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
小班开学寄语
2014/04/04 职场文书
股东合作协议书范本
2014/04/14 职场文书
灰雀教学反思
2014/04/28 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
建国大业电影观后感
2015/06/01 职场文书
卡特教练观后感
2015/06/08 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python