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 命令行也可以自动补全
Nov 30 Python
实例说明Python中比较运算符的使用
May 13 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python网络应用开发知识点浅析
May 28 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 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
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
python复制文件的方法实例详解
2015/05/22 Python
Python中的zipfile模块使用详解
2015/06/25 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python中的 enum 模块源码详析
2019/01/09 Python
Django 自动生成api接口文档教程
2019/11/19 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
工作评语大全
2014/04/26 职场文书
化工工艺设计求职信
2014/06/25 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
运动会主持词大全
2015/07/02 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
python基于turtle绘制几何图形
2021/06/15 Python
Redis实现订单过期删除的方法步骤
2022/06/05 Redis
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL