字典排序

问题

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

解决方案

为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的OrderedDict 类。在迭代操作的时候它会保持元素被插入时的顺序,示例如下:

from collections import OrderedDict

d = OrderedDict()

d['foo'] = 1

d['bar'] = 2

d['spam'] = 3

d['grok'] = 4

print(d)

# OrderedDict([('foo', 1), ('bar', 2), ('spam', 3), ('grok', 4)])

for key, value in d.items():

print(key, value)

# foo 1

# bar 2

# spam 3

# grok 4

import json

d1 = json.dumps(d)

print(d1, type(d1))

# {"foo": 1, "bar": 2, "spam": 3, "grok": 4}

当你想要构建一个将来需要序列化或编码成其他格式的映射的时候,OrderedDict是非常有用的。比如,你想精确控制以 JSON 编码后字段的顺序,你可以先使用OrderedDict 来构建这样的数据。

讨论

OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。

需要注意的是,一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候(比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),那么你就得仔细权衡一下是否使用 OrderedDict 带来的好处要大过额外内存消耗的影响。

python dict 排序原理_第一章Python数据结构和算法(字典排序)相关推荐

  1. 用python计算复利计算器_第一章 Python简介

    全览: Python的大部分基本特性:如变量.表达式.控制流.函数.生成器.类和输入\输出: Python3和Python2.6的区别:大多数与打印和I/O有关: ------------------ ...

  2. Python Cookbook --第一章:数据结构和算法(1)

    问题1:现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? >>> p = (4,5) >>> x,y = p >>&g ...

  3. Python3-Cookbook总结 - 第一章:数据结构和算法

    第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...

  4. 第一章:数据结构和算法

    第一章:数据结构和算法 - python3-cookbook 3.0.0 文档 1.1 将序列分解为单独的变量 问题:一个包含N个元素的元组或序列,将它里面的值解压后同时赋值给N个变量 解决:任何可迭 ...

  5. [转载] 《python程序设计应用教程》第一章 python语言概述

    参考链接: Python语言的优势和应用 第一章 python语言概述 1.1 python语言简介 ① 众多的开源的科学计算软件包都提供了python的调用接口,例如:计算机视觉库OpenCV.三维 ...

  6. python数据分析的应用场景_第一章Python数据分析概述

    第4节:重要的Python数据分析类库 1.NumPy(Numerical Python)是Python科学计算的基础包 提供了快速高效的多维数组对象ndarray 提供了对数组执行元素级计算以及直接 ...

  7. python包括哪些部分_第一部分 Python基础篇

    第⼀一部分 Python基础篇 1. 为什什么学习Python? 朋友推荐,比较简单易学,生态圈比较强大 发展趋势:人工智能.数据分析 2. 通过什什么途径学习的Python? 廖雪峰.网络博客.相关 ...

  8. python的输入输出函数_第一章、走进Python,输入和输出

    Python在Linux中的应用: 1. 直接在Linux命令行中输入:#   python   回车,进入交互式环境  ,提示符中出现>>>就说明进入python成功 (1)可以直 ...

  9. python语言程序设计编程题_《python语言程序设计》_第一章编程题

    题目1.1 :显示"welcome to python " 答案:print('welcome to python') 题目1.2:显示"welcome to pytho ...

最新文章

  1. 数学差、物理差、英语又烂的放牛娃,后来竟成了清华校长,还做出了诺奖级的研究成果...
  2. 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列
  3. 1711: [Usaco2007 Open]Dingin吃饭
  4. 关于虚数i和欧拉公式对旋转的一点启示
  5. Spring→简介核心作用范围、框架、接口编程、IOC控制反转、单元测试、Bean容器、注入、作用域、生命周期、自动装配注入、自动扫描@注解
  6. 第九课 如何调试以太坊官网的智能合约众筹案例
  7. ${pram.name}
  8. bandizip关闭自动更新提示的方法步骤
  9. writeup-passcode
  10. 已经有几百个制造企业的痛点问题在这了,你的在哪?
  11. CRM笔记(1):对CRM概念的理解
  12. 教你三步优化宝贝标题,搜索流量翻倍获取
  13. python 复制并重命名文件_python 复制并重命名文件
  14. 【算法题】触宝2018编程题二
  15. CP2102 USB转串口电路设计以及介绍
  16. asp.net生成csv文件,并在客户端点击下载(文件流直接输出到客户端而不是先生成保存在服务端再下载)
  17. C++11新特性之列表初始化、POD、聚合类
  18. Deep dream——《Going Deeper into Neural Networks》
  19. python编程语法教程-Python编程基础语法快速入门
  20. WebRtc学习资料整理

热门文章

  1. C/Cpp / C++ 构造函数和析构函数可以是虚函数吗
  2. C/Cpp / 设计模式 / 简单工厂模式
  3. COG、XR、X5R、Y5V电容器分类
  4. 乖离性暗机器人_乖离性百万亚瑟王国服超弩暗机器人如何打|乖离性百万亚瑟王国服超弩暗机器人平民打法攻略分享_好特教程...
  5. mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)
  6. k30pro杀进程严重怎么解决_命运2掉帧严重怎么解决?提高帧数方法介绍
  7. vue elementui 切换语言
  8. 倒出mysql库命令行_mysql命令行导入导出数据库
  9. pytorch 矩阵相乘_编译PyTorch静态库
  10. mfc 子窗体任何消息都不触发_winform让窗体一直显示在桌面上以及FindWindow