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绘制常用的图表
Aug 27 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
Dec 20 Python
python实现对输入的密文加密
Mar 20 Python
django做form表单的数据验证过程详解
Jul 26 Python
python实现多进程通信实例分析
Sep 01 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
使用gunicorn部署django项目的问题
Dec 30 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 和 MySQL 基础教程(一)
2006/10/09 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
php的ddos攻击解决方法
2015/01/08 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
详解Python如何生成词云的方法
2018/06/01 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Python实现直播推流效果
2019/11/26 Python
python二元表达式用法
2019/12/04 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
Oracle快照(snapshot)
2015/03/13 面试题
高一数学教学反思
2014/02/07 职场文书
新教师岗前培训方案
2014/06/05 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
实习生个人总结范文
2015/02/28 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers