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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
python修改字典键(key)的方法
Aug 05 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
在Python中通过threshold创建mask方式
Feb 19 Python
python判断两个序列的成员是否一样的实例代码
Mar 01 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
python画条形图的具体代码
Apr 20 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异步调用socket实现代码
2012/01/12 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
Python实现数据库并行读取和写入实例
2017/06/09 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
基于python绘制科赫雪花
2018/06/22 Python
python实现画循环圆
2019/11/23 Python
Python多线程获取返回值代码实例
2020/02/17 Python
python3.7调试的实例方法
2020/07/21 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
元旦晚会邀请函
2014/02/01 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
《火烧云》教学反思
2014/04/12 职场文书
低碳环保标语
2014/06/12 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
初中差生评语
2014/12/29 职场文书
解析Java异步之call future
2021/06/14 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android