python有序字典OrderedDict()
# -*- coding:utf-8 -*-
"""
python有序字典
需导入模块collections
"""
import collections
# 通过OrderedDict类创建的字典是有序的
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
print dic """
类似通过列表的方式来实现字典有序
创建列表,添加列表元素k1时,再将k1作为字典的键,
因为列表是序的,所以遍历列表就可有序的遍历出字典所有的key
"""
dic = {'K1': 'V1', 'K2': 'V2', 'K3': 'V3'}
li = ['k1', 'k2', 'k3']
参考:
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()的更多相关文章
- python创建有序字典OrderedDict()
python 有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections "& ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
- Python 有序字典简介
Table of Contents 1. 有序字典-OrderedDict简介 1.1. 示例 1.2. 相等性 1.3. 注意 2. 参考资料 有序字典-OrderedDict简介 示例 有序字典和 ...
- Python 有序字典(OrderedDict)与 普通字典(dict)
Python 的基础数据类型中的字典类型分为:无序字典 与 有序字典 两种类型 1.无序字典(普通字典): my_dict = dict()my_dict["name"] = &q ...
- python有序字典
最近的django开发中用到了有序字典,所以研究了一下,以下. 示例: 有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的. 普通字典: d1={} d1['a ...
- python有序字典实现代码
class MyDict(dict): #有序字典实现 def __init__(self): self.li = [] super(MyDict,self).__init__() def __set ...
- python模块介绍- collections(5)-OrderedDict 有序字典
1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...
- python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列
1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 Counter 我们从中挑选一些相对常用的方法来举例: 在上面的例子 ...
- Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器
目录 1.Python计数器Counter 2.Python有序字典OrderredDict 3.Python默认字典default 4.python可命名元组namedtuple 5.Python双 ...
随机推荐
- 【tomcat】sessionId学习(未完待续)
这里主要研究tomcat中session的管理方式以及sessionId的原理,下文将研究sessionid存到redis中以及基于redis实现session共享. 平时也就是了解session是基 ...
- 【API】检查进程是否存在 - CreateToolhelp32Snapshot
1 学习目标 今天静态逆向mydocument病毒时,看到病毒代码为了防止自身被调试会先检测杀毒软件和调试工具的进程是否存在.如果没有杀毒软件则释放真正的病毒文件,提前熟悉一下枚举进程的反汇编代码. ...
- C语言表驱动法编程实践
数据压倒一切.如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明.编程的核心是数据结构,而不是算法. ——Rob Pike 说明 本文基于这样的认识:数据是易变的,逻辑是稳定的. ...
- java并发编程系列七:volatile和sinchronized底层实现原理
一.线程安全 1. 怎样让多线程下的类安全起来 无状态.加锁.让类不可变.栈封闭.安全的发布对象 2. 死锁 2.1 死锁概念及解决死锁的原则 一定发生在多个线程争夺多个资源里的情况下,发生的原因是 ...
- 调用链系列三、基于zipkin调用链封装starter实现springmvc、dubbo、restTemplate等实现全链路跟踪
一.实现思路 1.过滤器实现思路 所有调用链数据都通过过滤器实现埋点并收集.同一条链共享一个traceId.每个节点有唯一的spanId. 2.共享传递方式 1.rpc调用:通过隐式传参.dubbo有 ...
- java中printf()方法简单用法
%n 换行 相当于 \n %c 单个字符 %d 十进制整数 %u 无符号十进制数 %f 十进制浮点数 %o 八进制数 %x 十六进制数 %s 字符串 %% 输出百分号 > 在printf()方法 ...
- WampServer配置
本机php环境搭建教程:windows环境下wampserver的配置教程--超级详细 对于初做PHP网站的朋友来说,第一步肯定是希望在自己电脑是搭建PHP环境,省去空间和上传的麻烦!但搭建环境也不是 ...
- iOS 8 WKWebView 知识点
首先看看这篇文章,写得很好:http://nshipster.cn/wkwebkit/ 再推荐去看看 iOS_8_by_Tutorials 这本书里的 WKWebView相关章节! 我这里说下自己的简 ...
- Python-CSS入门
一.架构分析 页面 => div的层级结构 => 具有采用哪些功能标签显示内容 结构层 > 位置层(布局层) > 内容层 二.css引入 - 行间式 <!-- 简单直接, ...
- JS实现购物车02
需求使用JS实现购物车功能02 具体代码 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...