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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
python进阶教程之动态类型详解
Aug 30 Python
Python实现Const详解
Jan 27 Python
python实现通过代理服务器访问远程url的方法
Apr 29 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
对pandas中apply函数的用法详解
Apr 10 Python
Python使用gRPC传输协议教程
Oct 16 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 Python
python中redis包操作数据库的教程
Apr 19 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 运行效率总结(提示程序速度)
2009/11/26 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
Sublime开发python程序的示例代码
2018/01/24 Python
python爬虫实例详解
2018/06/19 Python
python读写LMDB文件的方法
2018/07/02 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
企业总经理岗位职责
2014/02/13 职场文书
高中运动会广播稿
2014/09/16 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
租车协议书
2015/01/27 职场文书
2019教师的学习计划
2019/06/25 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
你真的会用Mysql的explain吗
2022/03/31 MySQL