2011-03-28 54 views
16

這是我的代碼:如何顛倒python字典中鍵的順序?

a = {0:'000000',1:'11111',3:'333333',4:'444444'} 

for i in a: 
    print i 

它表明:

0 
1 
3 
4 

,但我想讓它顯示:

4 
3 
1 
0 

所以,我該怎麼辦?

+5

字典沒有訂單。這些關鍵字出現在似乎只是運氣的排序順序中(以及您不能依賴的實現細節)。沒有固有的順序。 – 2011-03-28 10:01:30

回答

26

鍵在重述,順序是任意的。這只是巧合,他們是按排序順序排列的。

>>> a = {0:'000000',1:'11111',3:'333333',4:'444444'} 
>>> a.keys() 
[0, 1, 3, 4] 
>>> sorted(a.keys()) 
[0, 1, 3, 4] 
>>> reversed(sorted(a.keys())) 
<listreverseiterator object at 0x02B0DB70> 
>>> list(reversed(sorted(a.keys()))) 
[4, 3, 1, 0] 
+13

實際上,您可以通過執行'sorted(a.keys(),reverse = True)'而不是使用'reversed()'內建函數來加快翻轉的情況。 – ncoghlan 2011-03-28 10:54:23

8

嘗試:

for i in sorted(a.keys(), reverse=True): 
    print i 
12

字典是無序的,所以你不能扭轉他們。當前輸出的順序是任意的。

這就是說,你可以訂購當然鍵:

for i in sorted(a.keys(), reverse=True): 
    print a[i]; 

,但是這給你的相反的順序進行排序鍵,不一定是他們如何被添加鍵的順序相反。即它不會給你1 0 3如果你的字典是:

a = {3:'3', 0:'0', 1:'1'} 
1
for i in reversed(sorted(a.keys())): 
    print i 
+1

我認爲這是一個「壞」的答案,因爲提問者顯然有一個關於python「dict」函數的錯誤概念,應該解決這個錯誤概念,而不是給他看起來像他想要的東西。 – 2011-03-28 07:04:20

+0

你說得對,我應該更仔細地閱讀這個問題。 – Simon 2011-03-28 07:36:02

+0

Upvote:StackExchange不是一個懲教機構。 ifLoop顯示如何提供幫助,而不僅僅是正確的。 – 2014-12-12 19:25:10

4

Python詞典沒有與它們關聯的任何「順序」。這只是一個'巧合',字典是打印相同的順序。沒有保證字典中的項目以任何順序出現。

如果你想處理訂購,你需要將字典轉換爲列表。

a = list(a) # keys in list 
a = a.keys() # keys in list 
a = a.values() # values in list 
a = a.items() # tuples of (key,value) in list 

現在,您可以對列表進行排序正常,例如,a.sort()和扭轉它爲好,例如,a.reverse()

+0

這隻會將鍵放在列表中。你會失去價值。 – 2011-03-28 08:13:00

+0

+1,用於解釋所有其他答案實際上轉換爲列表。 – Boz 2014-09-01 12:14:57

4

Python的字典中沒有2.x的有序但是3.1中有一個有序的字典實現。

+1

+1爲OrderedDict。事實上,它也可以在Python 2.7中使用:http://docs.python.org/library/collections.html#collections.OrderedDict – 2011-03-28 08:14:22