python创建有序字典OrderedDict

  1. # -*- coding:utf-8 -*-
  2. """
  3. python有序字典
  4. 需导入模块collections
  5. """
  6. import collections
  7. # 通过OrderedDict类创建的字典是有序的
  8. dic = collections.OrderedDict()
  9. dic['k1'] = 'v1'
  10. dic['k2'] = 'v2'
  11. dic['k3'] = 'v3'
  12. print dic
  13.  
  14. """
  15. 类似通过列表的方式来实现字典有序
  16. 创建列表,添加列表元素k1时,再将k1作为字典的键,
  17. 因为列表是序的,所以遍历列表就可有序的遍历出字典所有的key
  18. """
  19. dic = {'K1': 'V1', 'K2': 'V2', 'K3': 'V3'}
  20. li = ['k1', 'k2', 'k3']

参考:

python模块简介之有序字典(OrderedDict)

python字典为什么是无序的?

1 Python的Hash实现是基于Open Addressing的。当你搜索所有的key的时候,实际上就是遍历整个表,寻找那些value不为null的entry,然后把它们的key放到一个list里面,这个 过程自然是不保证顺序的。

2

那本书都写了啥...(以下用Hash 简称 Hash Table)
Hash的思想很简单, 就是跟 index sorting 一个内核, 申请一个Array, 并将Array的位置作为一种元数据
在 index 排序的时候, 很朴素的, 数值的大小就是 放入array的位置,
举个例子 我有int A[6], 我要排序 2 5 4 8
将这些数分别放入Array的2 5 4 8位, 然后按顺序读出, 数列就以O(n)的速度排列完了

Hash 和 Index 不同的是,
数值到Array位置的映射是不一样的, 在Index sorting中, 数值在Array的位置就是数值本身
在Hash中, 是变化的算法, 用Key算出在Array的位置, 放入Value
比如我的Key是10, 在Hash中, 可能会把Value放到Array位置2上

在这种算法下, 插入顺序是不可估计的.
第一次操作, Key 2 Value 90 插入到 Hash Table A, 算出来位置是 5
第二次操作, Key 9 Value 10 插入到 Hash Table A, 算出来位置是 3
你发现了没有, Hash Table根本不保证插入的顺序
后来的数据是可以跑到先插入的数据前面去的.

Hash的本质是, 将一数列作为Key尽量平均分配另一个数列Value到程序已经申请好的Array上.

最后说点无关的, 也会导致字典乱序的原因.
Python会自动扩容字典.

 
作者:林诚
链接:https://www.zhihu.com/question/24306558/answer/27358613
来源:知乎

python有序字典OrderedDict()的更多相关文章

  1. python创建有序字典OrderedDict()

    python 有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections "& ...

  2. python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数

    上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...

  3. Python 有序字典简介

    Table of Contents 1. 有序字典-OrderedDict简介 1.1. 示例 1.2. 相等性 1.3. 注意 2. 参考资料 有序字典-OrderedDict简介 示例 有序字典和 ...

  4. Python 有序字典(OrderedDict)与 普通字典(dict)

    Python 的基础数据类型中的字典类型分为:无序字典 与 有序字典 两种类型 1.无序字典(普通字典): my_dict = dict()my_dict["name"] = &q ...

  5. python有序字典

    最近的django开发中用到了有序字典,所以研究了一下,以下. 示例: 有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的. 普通字典: d1={} d1['a ...

  6. python有序字典实现代码

    class MyDict(dict): #有序字典实现 def __init__(self): self.li = [] super(MyDict,self).__init__() def __set ...

  7. python模块介绍- collections(5)-OrderedDict 有序字典

    1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...

  8. python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列

    1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能  Counter 我们从中挑选一些相对常用的方法来举例: 在上面的例子 ...

  9. Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器

    目录 1.Python计数器Counter 2.Python有序字典OrderredDict 3.Python默认字典default 4.python可命名元组namedtuple 5.Python双 ...

随机推荐

  1. Django学习手册 - 模板语言(前端获取后台数据)

    先在views视图内,定义列表数据,以及字典数据.运用render函数传递两个列表数据至前端. from django.shortcuts import render list_info = [ {& ...

  2. java 多线程和并行程序设计

    多线程使得程序中的多个任务可以同时执行 在一个程序中允许同时运行多个任务.在许多程序设计语言中,多线程都是通过调用依赖系统的过程或函数来实现的 为什么需要多线程?多个线程如何在单处理器系统中同时运行? ...

  3. js里的回调函数

    function a(callback)  // 定义一个函数 ,需要传入的参数是callback  然后callback的类型为一个函数{console.log("callback还表示传 ...

  4. oracle分区分表

    (1) 表空间及分区表的概念表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.分区表:        当表中的数据量不断增大,查询数据的速 ...

  5. CentOS6.5运行yum报错:No module named yum

    公司测试机环境不知道给我卸了什么包,导致yum运行报错状况: 报错情况: There was a problem importing one of the Python modulesrequired ...

  6. 查看tomcat运行状态

    实时查看tomcat并发连接数: netstat -na | grep ESTAB | grep 8080 | wc -l 实时查看apache并发连接数: netstat -na | grep ES ...

  7. GitHub提交代码后不显示用户名只显示邮箱

    提交完代码如图: 解决方案: 右键git bash here 输入命令如下: git config --global user.name "username" git config ...

  8. 将数据库从Oracle迁移到SQL Server

    参考链接:http://www.360doc.com/content/15/0310/14/9260775_454038517.shtml

  9. caffe:fine-tuning

    http://blog.csdn.net/u010402786/article/details/70141261 https://zhuanlan.zhihu.com/p/22624331

  10. jquery----语法扩展(导入js文件)

    简单使用 第一步,新建js文件 第二步,在js文件中添加 $.extend({ "GDP": function () { console.log("哈哈哈哈") ...