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网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
python之wxPython应用实例
Sep 28 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
python中numpy.zeros(np.zeros)的使用方法
Nov 07 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
Django2.1.3 中间件使用详解
Nov 26 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
python实现按关键字筛选日志文件
Dec 24 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP模板引擎SMARTY
2006/10/09 PHP
实用函数8
2007/11/08 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
js date 格式化
2017/02/15 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
Python判断Abundant Number的方法
2015/06/15 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
就业意向协议书
2015/01/29 职场文书
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
pandas中关于apply+lambda的应用
2022/02/28 Python