字典排序

问题

你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。

解法

为了能控制一个字典中元素的顺序,你可以使用 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):字典排序相关推荐

  1. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  2. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  3. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  4. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  5. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  6. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  7. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  8. 《Python cookbook》笔记一

    <Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...

  9. python 对输入的单词进行字典排序_Python-对字典进行排序

    案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...

最新文章

  1. 网络营销重点之如何了解用户需求完善网络营销策略
  2. Alpha 冲刺 (9/10)
  3. ML之ME/LF:机器学习之风控业务中常用模型评估指标PSI(人群偏移度指标)的的简介、使用方法、案例应用之详细攻略
  4. js前端和后台数据交互-----前端传字符串,后台控制器将其转化为集合
  5. python企业级框架_Python六大开源框架对比:Web2py略胜一筹
  6. python中的readalllines用法_什么是最好的编程语言?(怎样才能爱上编程呢?)
  7. bzoj2437 [Noi2011]兔兔与蛋蛋
  8. Ubuntu18.04 安装 nvidia2080Ti显卡驱动
  9. 【紫书第十章】数论与概率入门
  10. 决策树算法与应用 学习笔记
  11. 收获与期待——2016第四届中国计算机行业发展成就奖揭晓
  12. linux nas共享存储6,NAS(网络附属存储)技术
  13. win10修改用户名||user中文名改英文名
  14. win10怎么设置动态壁纸
  15. NFC开发 —————实用工具以及开发文档(四)
  16. webuploader插件 前端实现图片旋转后上传
  17. 微型计算机ALE,微型计算机技术课后习题一二三章答案
  18. clob类型字段最大存储长度_Oracle的CLOB大数据字段类型
  19. java word导出带背景_Java 用Freemarker完美导出word文档(带图片)
  20. 病理档案计算机管理应用中不包括,病理档案材料管理

热门文章

  1. Linux内核的中断机制
  2. java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...
  3. 【转】01.Dicom 学习笔记-DICOM C-Store 消息服务
  4. 【转】带你玩转Visual Studio——02.带你新建一个工程
  5. 【转】HTTP协议中PUT和POST使用区别
  6. .NET三种异步模式(APM、EAP、TAP)
  7. php聊天室技术,PHP聊天室技术
  8. 算法 - KMP算法(字符串匹配)
  9. 连续反应matlab,MATLAB和Monte Carlo法在连续反应动力学中的应用.pdf
  10. mysql emma_ubuntu mysql emma中文乱码问题解决