# -*- 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
來源:知乎