2014-02-15 57 views
0

我試圖使用鍵值對的字典來存儲和訪問基於適當的鍵列表。以下是我正在使用的。Python 2.7字典與鍵值對列表重新排序

newDict = {'mod':[0,2], 'pro':[2,3], 'st':[6,10]} 
newDict2 = {'a':[0,2], 'b':[2,3], 'c':[6,10]} 

我建立這個字典在一個特定的順序,所以我可以用for循環遍歷它。但無論什麼原因,當我打印或通過for循環時,鍵的順序被重新排序。

print "the newDict is: " + str(newDict) 
print "the newDict2 is: " + str(newDict2) 
for key in newDict: 
    print "the key is: " + str(key) 

這個的輸出如下。

newDict is: {'pro': [2, 3], 'mod': [0, 2], 'st': [6, 10]} 
newDict2 is: {'a': [0, 2], 'c': [6, 10], 'b': [2, 3]} 
the key is: pro 
the key is: mod 
the key is: st 

我更關心鍵的順序而不是列表的值。所以我不想按照列表的值排序。我一直在做研究,但不知道爲什麼它會改變順序。我試着改變列表中的值來嘗試找出它,但我一直無法找到一個模式。我認爲在命令不是問題時使用了字典。也許點滴不是這樣的。任何幫助是極大的讚賞。

+2

除了在您的情況下命令*是一個問題。 –

+0

有一個orderedDict這樣的事情。我相信你想要使用那個 – bnjmn

回答

1

對不起,我有滯後互聯網問題

from collections import OrderedDict 

所以這是一個特殊的容器是一個OrderedDict,它是由鑰匙插入的順序排列,按鍵會保持它們的順序依次。

讓你有一些工藝打造的鑰匙,

newDict = OrderedDict() 

for some_iterator_value in some_iterator: 
    key = some_iterator_value 
    value = we_created_a_list 
    newDict[key] = value 
2

至於你提到的,Python字典不維持秩序。這意味着您不能保證在打印dict時以任何順序脫出鍵值對,或者在創建或修改後重複該鍵值對。但是,只要沒有插入或移除項目,此訂單(無論它是什麼)都將保留。

您的dict中的列表(與鍵對應的值)不會更改;他們仍然匹配他們被分配到的鑰匙。但是,鍵值對的順序已更改。

如果您希望鍵值對維持順序,您可以使用OrderedDict

from collections import OrderedDict 
newDict = OrderedDict([('mod', [0,2]), ('pro',[2,3]), ('st',[6,10])]) 
newDict2 = OrderedDict([('a',[0,2]), ('b',[2,3]), ('c',[6,10])]) 
+3

有一些保證,但它們非常小 - 例如你可以保證,只要你不插入或刪除任何項目,多次遍歷它,字典的順序將始終保持一致。 – mgilson