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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
Python记录详细调用堆栈日志的方法
May 05 Python
python直接访问私有属性的简单方法
Jul 25 Python
Python中进程和线程的区别详解
Oct 29 Python
Python3生成手写体数字方法
Jan 30 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
python能做哪方面的工作
Jun 15 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
Python基本的内置数据类型及使用方法
Apr 13 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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
一个MYSQL操作类
2006/11/16 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
PHP解决中文乱码
2017/04/28 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
Python模拟用户登录验证
2017/09/11 Python
Python set常用操作函数集锦
2017/11/15 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Python批量发送post请求的实现代码
2018/05/05 Python
windows下python安装小白入门教程
2018/09/18 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
在django中自定义字段Field详解
2019/12/03 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
C#如何进行LDAP用户校验
2012/11/21 面试题
门卫岗位安全职责
2013/12/13 职场文书
趣味体育活动方案
2014/02/08 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
毕业论文评语大全
2014/04/29 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
建筑横幅标语
2014/10/09 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python