2012-05-20 68 views
0

我有一本字典:如何從左至右打印字典的值?

a = {"w1": "wer", "w2": "qaz", "w3": "edc"} 

當我嘗試打印它的價值,他們是從右側印到左:

>>> for item in a.values(): 
    print item, 


edc qaz wer 

我希望他們從左至右打印:

wer qaz edc 

我該怎麼辦?

+0

這似乎是相關的:http://stackoverflow.com/questions/364519/in-python-how-to-i-iterate-over-a-dictionary-in-sorted-order – dmh

回答

9

你不能。字典沒有任何可以使用的順序,所以在字典文字方面沒有「從左到右」的概念。決定排序,並堅持下去。

+0

那麼爲什麼它更喜歡從右向左寫值? – alwbtc

+0

@alwbtc這是一個不安全的依賴的實現問題(即,它可能並不總是按順序執行) – Levon

+2

它並不「偏好從右向左寫值」。它按照任意順序寫入值,這取決於鍵的確切值和實現細節,在這種特殊情況下,**會發生**,與創建字典時的順序相反。 –

2

假設你希望他們在按鍵的字母順序排列,你可以做這樣的事情:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"} # your dictionary 

keylist = a.keys() # list of keys, in this case ["w3", "w2", "w1"] 
keylist.sort()  # sort alphabetically in place, 
        # changing keylist to ["w1", "w2", w3"] 

for key in keylist: 
    print a[key]  # access dictionary in order of sorted keys 
0

爲@ IgnacioVazquez - 艾布拉姆斯提到的,這是沒有這樣的事情在字典order,但你可以做到使用來自http://pypi.python.org/pypi/odict

的訂購字典odict的類似效果也檢出PEP372以獲得更多討論和odict修補程序。

3

你可以使用collections.OrderedDict(python 2.7或更新版本 - 有一個ActiveState配方,它爲python 2.4或更新版本(我認爲)提供了這個功能)來存儲你的項目。當然,您需要按照正確的順序將這些項插入字典中({}語法將不再起作用 - 也不會將key = value傳遞給構造函數,因爲正如其他人所提到的,那些依賴於常規字典沒有訂單的概念)

+0

+1每當有人開始要求輸入字符串以外的任意或排序的鍵順序時,OrderedDict或類似的自定義類就是他們之後的東西。 –

0

字典使用散列值關聯值。排序字典的唯一方法看起來是這樣的:

dict = {} 
x = [x for x in dict] 
# sort here 
y = [] 
for z in x: y.append(dict[z]) 

我沒有做在python任何實際工作一段時間,所以我可能會有點生疏。如果我錯了,請糾正我。