2014-03-14 122 views
4

有序字典我有在Python字典如此: 字典= { 'A':1, 'Q':1, 'L':2, 'M':1, 'U':1 ,「我」:1}在Python

有沒有辦法,我可以保持這本字典的順序任何方式表達這種方式。我已經閱讀過幾個論壇,其中大部分都建議使用OrderedDict()。但正如解釋在這裏:

Python OrderedDict not keeping element order

OrderedDict(字典)將不會維持秩序時,詞典是寫在表格。我無法以特定的方式(例如元組列表)手動創建字典,因爲它是由別處的代碼隨機生成的。 非常感謝您的幫助!

+0

如果你的字典是「通過隨機生成的代碼在別處」,那麼你想要保持什麼樣的秩序?你已經失去了「其他地方的代碼」中排序的任何概念。換句話說,「保持這本字典的順序」是沒有意義的 - 字典是**沒有命令**。 – isedev

+1

不要將變量命名爲類型名稱,即不要將其稱爲'dict'。 – metatoaster

回答

2

你寫dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}的那一刻,你已經失去了元素的順序。該方法來保持它:

一個。首先從您的數據創建OrderedDict

b。將您的dict轉換爲元組列表並按照您需要的方式排序,然後從中創建OrderedDict

所有的一切,從你的問題,你想保留它是什麼並不清楚。如果它是「隨機」生成的,那麼誰在乎,如果它背後有某種邏輯,則使用此邏輯重新創建該訂單並使用它創建OrderedDict。如果在幕後發生了某些輸入數據產生的字典,那麼,唉,您看到的順序並不是它創建的順序。

PS不要叫你的字典dict

1

如果您想訂購在你的控制之外創建的字典,你可以使用以下方法來獲取其key:value對作爲元組的列表:

pairs = my_dict.items() 

然後,您可以任何方式,您對此列表進行排序喜歡。當你這樣做,你可以對的有序列表傳遞給OrderedDict構造

from collections import OrderedDict 
# sort in some way (for example, reverse the key order) 
pairs = reversed(my_dict.items()) 
ordered = OrderedDict(pairs) 
0

只需使用2:

dict = {'a':4, 'q':1, 'l':2, 'm':4, 'p':1} 

i = max(dict.values())+1 
for el in range (i): 
    for letter in dict: 
     if el==dict[letter]: 
      print(letter,dict[letter])