Python cookbook(数据结构与算法)让字典保持有序的方法
作者:垄上行 时间:2022-04-28 03:28:04
本文实例讲述了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程序设计有所帮助。
来源:http://www.cnblogs.com/apple2016/p/5746450.html
标签:Python,数据结构与算法,字典
0
投稿
猜你喜欢
Python爬取视频(其实是一篇福利)过程解析
2021-09-21 17:52:11
vue中使用jwt-decode解析token的方法
2023-07-02 17:03:24
python读取html中指定元素生成excle文件示例
2021-04-08 19:51:11
Python OpenCV图像指定区域裁剪的实现
2021-12-30 01:41:35
一些 T-SQL 技巧
2024-01-26 00:21:16
Python实现树的先序、中序、后序排序算法示例
2022-12-26 04:00:18
Python ADF 单位根检验 如何查看结果的实现
2021-05-24 13:40:39
Python pandas DataFrame基础运算及空值填充详解
2022-01-01 22:19:49
Java 如何使用JDBC连接数据库
2024-01-23 04:30:12
python图形开发GUI库pyqt5的基本使用方法详解
2022-07-08 02:31:55
Python参数传递机制传值和传引用原理详解
2023-07-28 11:16:02
PyTorch中torch.matmul()函数常见用法总结
2023-03-28 16:01:31
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2024-04-26 17:37:39
python 数据类型强制转换的总结
2021-03-25 03:40:26
实例介绍Python中整型
2021-03-09 08:00:33
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2024-01-17 22:31:24
Python深度学习之FastText实现文本分类详解
2022-09-03 10:35:28
asp如何在ADO中客户端利用好缓存技术?
2010-06-17 12:50:00
MYSQL教程:表达式操作符和数据类型转换
2009-02-27 15:51:00
MySQL中SQL命令语句条件查询实例详解
2024-01-12 19:45:48