因此,我意識到字典是無序數據類型,但是如果您有字典,可以調用d.keys()並獲取一個有序數據類型的列表。該訂單如何確定?如果我做這樣的事情如何在python字典中確定鍵的順序
d = {1: 2, 3: 4, 5: 6}
d[4] = 7
d[10] = 2
爲什麼運行起來也()返回[1, 10, 3, 4, 5]
?
因此,我意識到字典是無序數據類型,但是如果您有字典,可以調用d.keys()並獲取一個有序數據類型的列表。該訂單如何確定?如果我做這樣的事情如何在python字典中確定鍵的順序
d = {1: 2, 3: 4, 5: 6}
d[4] = 7
d[10] = 2
爲什麼運行起來也()返回[1, 10, 3, 4, 5]
?
詞典沒有排序,您必須對鍵進行排序,如果您想要排序它們。
指數是hash tables。他們明確沒有排序,這意味着你的代碼不應該依賴於他們有任何特定的順序。
返回鍵的順序取決於很多事情,其中包括插入它們的順序,插入它們時的字典大小,是否刪除了某些東西,函數用於計算每個鍵的散列值以及你正在使用的Python的實現(Python,Jython,IronPython和PyPy都可能在完全相同的代碼上給出不同的結果)。
如果你想要一個有序的字典(其中的鍵保持你插入它們的順序),看看https://pypi.python.org/pypi/odict(它在Python 2.7以後的stdlib中)。
Python語言沒有定義鍵的順序;任何實現都可以使用它想要的任何順序。 The documentation說:
鍵和值以非隨機的任意順序迭代,跨Python實現而變化,並且取決於字典的插入和刪除歷史。
(在文檔中的措辭和位置是在2.x中略有不同,但這個想法是一樣的。)
如果你對CPython的執行情況,特別詢問,細節有所改變了兩次在2.x和3.4之間,所以你不得不問一個特定的版本,而不是一般的CPython。正如馬克斯諾埃爾的答案所暗示的那樣,這些細節非常複雜。
但真正:
的一件事,你可以指望的是,如果你多次重複相同的單詞而不改變它,順序將是一致的。
如果您想要像字典一樣操作但保留鍵的插入順序,請參見標準庫中的collections.OrderedDict
。如果你的行爲像一個字典,但按照排序順序保存鍵,你可能需要一個基於樹的結構;有多種第三方選項可供選擇,如blist.sorteddict
和bintrees.FastRBTree
。
它只是隨機的,不同於發佈版本。根本不應該有任何固定的d.keys()命令。事實上,在2.x d.keys()返回一個列表給你的錯覺,有一些內部的順序。但它不存在。請注意,在3.x d.keys()返回一個視圖objet,這是一個可迭代的,而不是列表。你必須使用列表(d.keys())來創建一個真正的列表。
哈希函數 –
http://stackoverflow.com/questions/14863536/iterate-through-python-dictionary-by-keys-in-order – 2013-12-10 19:59:42
http://docs.python.org/2/library/ stdtypes.html#dict.items:「鍵和值以非隨機的任意順序列出,在Python實現中有所不同,並且取決於字典的插入和刪除歷史 如果items(),keys() ,值(),iteritems(),iterkeys()和itervalues()被調用時不需要對字典進行中間修改,這些列表將直接對應。「 –