Python实用技法第6篇:让字典保持有序

1、需求

我们想创建一个字典,同时当对字典做迭代或序列化操作时,也能控制其中元素的顺序。

2、解决方案

要控制字典中元素的顺序,可以使用collections模块中的OrderedDict类。当对字典做迭代时,它会严格按照元素初始添加的顺序进行。

from collections import OrderedDict

d=OrderedDict()
d[‘a‘]=1
d[‘b‘]=2
d[‘c‘]=3
d[‘d‘]=4

#根据插入删除输出
for key in d:
    print(key,d[key])

结果:

a 1
b 2
c 3
d 4

当想构建一个映射结构以便稍后对其做序列化或编码成另一种格式时,OrderedDict就显得特别有用。例如:如果想在进行JSON编码时精确控制各字段的顺序,那么只要首先在OrderedDict中构建数据就可以了:

from collections import OrderedDict
import json

d=OrderedDict()
d[‘a‘]=1
d[‘b‘]=2
d[‘c‘]=3
d[‘d‘]=4

j=json.dumps(d)
print(j)

结果:

{"a":?1,?"b":?2,?"c":?3,?"d":?4}
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

OrderedDict内部维护了一个双向链表,它会根据元素加入的顺序来排列键的位置。第一个新加入的元素被放置在链表的末尾,接下来对已存在的键做重新赋值,不会改变键的位置。

请注意:OrderedDict的大小是普通字典的2倍。这是由于它额外创建的链表所致。因此,如果打算构建一个涉及大量OrderedDict实例的数据结构(例如从CSV文件中读取100 000行行内容到OrderedDict列表中),那么需要认证对应用做需求分析,从而判断使用OrderedDict所带来的好处是否能超越因额外的内存开销所带来的缺点。

原文地址:https://blog.51cto.com/14445003/2428100

时间: 2024-10-03 18:41:18

Python实用技法第6篇:让字典保持有序的相关文章

Python实用技法第31篇:文本过滤和清理

问题 某些无聊的脚本小子在Web页面表单中填入了"pyt???"这样的文本,我们想以某种方式将其清理掉. 解决方案 文本过滤和清理所涵盖的范围非常广泛,涉及文本解析和数据处理方面的问题.在非常简单的层次上,我们可能会用基本的字符串函数(例如str.upper()和str.lower())将文本转换为标准形式.简单的替换操作可通过str.replace()或re.sub()来完成,它们把重点放在移除或修改特定的字符序列上.也可以利用unicodedata.normalize()来规范化文

Python实用技法第24篇:正则:查找和替换文本

1.需求 我们想对字符串中的文本做查找和替换. 2.解决方案 对于简单的文本模式,使用str.replace()即可. 例如: text='mark ,帅哥,18,183 帅,mark' print(text.replace('18','19')) print(text) Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎 运行结果: mark ,帅哥,19,193 帅,mark mark ,帅哥,18,183

Python实用技法第22篇:利用Shell通配符做字符串匹配

1.需求 当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配. 2.解决方案 fnmatch模块提供了两个函数:fnmatch()和fnmatchcase(),可用来执行这样的匹配,使用起来非常简单. 实例: from fnmatch import fnmatch,fnmatchcase print(fnmatch('mark.txt','*.txt')) print(fnmatch('mark.txt','?ark.txt'))

Python实用技法第26篇:定义实现最短匹配的正则表达式

1.需求 我们正在尝试用正则表达式对文本模式做匹配,但识别出来的是最长的可能匹配.相反,我们想将其修改为最短的可能匹配. 2.解决方案 这个问题通常会在匹配的文本被一对开始和结束的分隔符包起来的时候出现(例如带引号的字符串),为了说明这个问题,请看下面实例: import re str_pat=re.compile(r'\"(.*)\"') text1='mark say "love"' text2='mark say "love",jingji

Python实用技法第32篇:对齐文本字符串

问题 我们需要以某种对齐方式将文本做格式化处理. 解决方案 对于基本的字符串对齐要求,可以使用字符串的ljust().rjust()和center()方法.示例如下: >>> text = 'Hello World' >>> text.ljust(20) 'Hello World ' >>> text.rjust(20) ' Hello World' >>> text.center(20) ' Hello World ' >&g

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

2.python基础之—列表,元组,字典,集合,字符串的使用方法

一.关于python序列的简介. python里面的序列大部分都可以执行,索引,切片,加,乘,检查长度,以及检查某个成员是否存在,甚至还可以找出这个序列中最小的元素和最大的元素,并且序列都是可迭代的. 解释下个人理解的迭代,迭代(iteration),序列中的迭代就是对序列中的每个元素重复执行某些操作/ 具体的迭代方式后面会说到. 下面就说说python序列的共有特点. 1.索引 一个序列中,所有的元素都有自己的编号,这个编号是从0开始的,这个编号就是所谓的索引,这些元素可以通过索引来依次访问.

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进

Python开发【第二十篇】:缓存

Python开发[第二十篇]:缓存redis&Memcache 点击这里 Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可