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 06 Python
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
python从入门到精通(DAY 1)
Dec 20 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
python爬虫获取新浪新闻教学
Dec 23 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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 auth_http类库进行身份效验
2009/03/19 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python实现针对中文排序的方法
2017/05/09 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
主管职责范文
2013/11/09 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
我的理想演讲稿
2014/04/30 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL