2013-07-31 33 views
4

我已經使用python Dictionary創建了一個程序。在這個簡單的程序中,我無法理解字典的內存結構。當我從字典中檢索數據時,數據不會按順序檢索。如何從python中的字典獲得有序的輸出?

Digit = {1 : One, 2: Two,3: Three,4: Four,5: Five,6: Six,7: Seven,8: Eight,9: nine,0: Zero} 
print Digit 

它會給我這樣Two,Three,Five,Four輸出等,如果我想在序列我有什麼做的命令?

回答

4

字典在Python中被任意排序。訂單不能保證,你不應該依賴它。如果您需要訂購集合,請使用OrderedDict或列表。

如果您要訪問的詞典按鍵的順序,先拿到鑰匙的名單,然後進行排序,然後通過該步驟:

keys = Digit.keys() 
keys.sort() 

for i in keys: 
    print Digit[i] 
+0

它是在打印語句中對字典進行排序的好方法。但如何存儲它? –

+0

你不要存儲它排序;這不是字典的重點。字典的整個概念是用友好的鑰匙而不是按順序訪問它。如果您想要記住添加元素的順序,請使用列表。 –

1

如果你絕對要存放有序的數據,你可以使用OrderedDict as Burhan Khalid在他的回答中建議:

>>> from collections import OrderedDict 
>>> Digit = [(1, "One"), (2, "Two"), (3, "Three"), (4, "Four"), (5, "Five"), (6, "Six"), (7, "Seven"), (8, "Eight"), (9, "Nine"), (0, "Zero")] 
>>> Digit = OrderedDict(Digit) 
>>> Digit 
OrderedDict([(1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five'), (6, 'Six'), (7, 'Seven'), (8, 'Eight'), (9, 'Nine'), (0, 'Zero')]) 
>>> for k,v in Digit.items(): 
...  print k, v 
... 
1 One 
2 Two 
3 Three 
4 Four 
5 Five 
6 Six 
7 Seven 
8 Eight 
9 Nine 
0 Zero 
+0

通過首先將「Digit」字典作爲常規詞典創建,您可能會在訂單傳遞給OrderedDict之前冒着訂單丟失的風險。如果它適合你,那麼感謝Python整數散列給自己的事實(在不使用散列隨機化的Python版本中),你簡直是幸運的。一個更好的解決方案是使用元組列表:'Digit = OrderedDict([(1:「One」),(2:「Two」),...]) – Blckknght

+0

@Blckknght你說得很對,會改變代碼 –