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中的pypy
Jan 12 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
python Jupyter运行时间实例过程解析
Dec 13 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
python3将变量输入的简单实例
Aug 19 Python
Python pathlib模块使用方法及实例解析
Oct 05 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
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
PHP加密解密函数详解
2015/10/28 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
对Python 语音识别框架详解
2018/12/24 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
销售冠军获奖感言
2014/02/03 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
设备收款委托书范本
2014/10/02 职场文书
汽车转让协议书范本
2014/12/07 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
毕业感言怎么写
2015/07/31 职场文书
高三化学教学反思
2016/02/22 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL