《Python Cookbook 3rd》笔记(1.7):字典排序
字典排序
问题
你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。
解法
为了能控制一个字典中元素的顺序,你可以使用 collections模块中的OrderedDict类。在迭代操作的时候它会保持元素被插入时的顺序,示例如下:
from collections import OrderedDict
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4# Outputs "foo 1", "bar 2", "spam 3", "grok 4"
for key in d:print(key, d[key])
当你想要构建一个将来需要序列化或编码成其他格式的映射的时候,OrderedDict是非常有用的。比如,你想精确控制以 JSON 编码后字段的顺序,你可以先使用OrderedDict 来构建这样的数据:
>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'
>>>
讨论
OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。
需要注意的是,一个OrderedDict的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候 (比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),那么你就得仔细权衡一下是否使用 OrderedDict 带来的好处要大过额外内存消耗的影响。
《Python Cookbook 3rd》笔记(1.7):字典排序相关推荐
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
- Python Cookbook 3rd Edition Documentation
Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- 《Python cookbook》笔记二
<Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- 《Python Cookbook 3rd》笔记汇总
文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...
- 《Python cookbook》笔记一
<Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...
- python 对输入的单词进行字典排序_Python-对字典进行排序
案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...
最新文章
- 网络营销重点之如何了解用户需求完善网络营销策略
- Alpha 冲刺 (9/10)
- ML之ME/LF:机器学习之风控业务中常用模型评估指标PSI(人群偏移度指标)的的简介、使用方法、案例应用之详细攻略
- js前端和后台数据交互-----前端传字符串,后台控制器将其转化为集合
- python企业级框架_Python六大开源框架对比:Web2py略胜一筹
- python中的readalllines用法_什么是最好的编程语言?(怎样才能爱上编程呢?)
- bzoj2437 [Noi2011]兔兔与蛋蛋
- Ubuntu18.04 安装 nvidia2080Ti显卡驱动
- 【紫书第十章】数论与概率入门
- 决策树算法与应用 学习笔记
- 收获与期待——2016第四届中国计算机行业发展成就奖揭晓
- linux nas共享存储6,NAS(网络附属存储)技术
- win10修改用户名||user中文名改英文名
- win10怎么设置动态壁纸
- NFC开发 —————实用工具以及开发文档(四)
- webuploader插件 前端实现图片旋转后上传
- 微型计算机ALE,微型计算机技术课后习题一二三章答案
- clob类型字段最大存储长度_Oracle的CLOB大数据字段类型
- java word导出带背景_Java 用Freemarker完美导出word文档(带图片)
- 病理档案计算机管理应用中不包括,病理档案材料管理
热门文章
- Linux内核的中断机制
- java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...
- 【转】01.Dicom 学习笔记-DICOM C-Store 消息服务
- 【转】带你玩转Visual Studio——02.带你新建一个工程
- 【转】HTTP协议中PUT和POST使用区别
- .NET三种异步模式(APM、EAP、TAP)
- php聊天室技术,PHP聊天室技术
- 算法 - KMP算法(字符串匹配)
- 连续反应matlab,MATLAB和Monte Carlo法在连续反应动力学中的应用.pdf
- mysql emma_ubuntu mysql emma中文乱码问题解决