博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python有序字典OrderedDict()
阅读量:4499 次
发布时间:2019-06-08

本文共 1236 字,大约阅读时间需要 4 分钟。

# -*- 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里面,这个 过程自然是不保证顺序的。

那本书都写了啥...(以下用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
来源:知乎

 

转载于:https://www.cnblogs.com/yiyezhouming/p/7756118.html

你可能感兴趣的文章
finally 的作用是什么?
查看>>
嵌入式Linux的调试技术
查看>>
CSS3
查看>>
用友U9 基础使用文件所在目录
查看>>
iOS CALayer 学习(1)
查看>>
jquery 分页控件(一)
查看>>
StackAndQueue(栈与队列)
查看>>
大话数据结构之一(绪论、算法)
查看>>
[转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化
查看>>
天涯宝盒-天涯看贴脚本-只看楼主-自动翻页
查看>>
实战MEF(5):导出元数据
查看>>
python中获取文件目录的方法
查看>>
南阳oj 分数加减法
查看>>
边工作边刷题:70天一遍leetcode: day 61-6
查看>>
边工作边刷题:70天一遍leetcode: day 86-2
查看>>
URLOS安装、升级、卸载
查看>>
Algorithm: 最大公约数 最小公倍数
查看>>
Spark之搜狗日志查询实战
查看>>
项目目标分析
查看>>
poj 1730
查看>>