鍵我有一本字典秩序Python字典
{'a': 'first', 'b': 'second'}
不過,我需要字典以不同的順序:
{'b': 'second', 'a': 'first'}
什麼是做到這一點的最好方法是什麼?
鍵我有一本字典秩序Python字典
{'a': 'first', 'b': 'second'}
不過,我需要字典以不同的順序:
{'b': 'second', 'a': 'first'}
什麼是做到這一點的最好方法是什麼?
詞典爲未訂購。所以沒有辦法做到這一點。
如果你有python2.7 +,你可以使用collections.OrderedDict
- 在這種情況下,你可以使用.items()
檢索項目列表,然後扭轉它,然後從列表逆轉創建新的OrderedDict
:
>>> od = OrderedDict((('a', 'first'), ('b', 'second')))
>>> od
OrderedDict([('a', 'first'), ('b', 'second')])
>>> items = od.items() # list(od.items()) in Python3
>>> items.reverse()
>>> OrderedDict(items)
OrderedDict([('b', 'second'), ('a', 'first')])
如果您正在使用較舊的Python版本,您可以從http://code.activestate.com/recipes/576693/
沒錯,你的例子中的兩個字典都是相同的。 – Hyperboreus 2011-05-21 18:14:23
排序和排序是不同的東西。 'OrderedDict'沒有排序,不能手動排序,Python中沒有任何數據結構是有序數據結構(即總是自動排序)。 – 2011-05-21 18:18:24
這就是我的意思。但爲了清晰起見編輯我的答案。 – ThiefMaster 2011-05-21 18:19:38
字典沒有順序。
你可以得到鍵,然後按照你喜歡的順序排列它們,然後迭代字典值。
keys = myDict.keys()
keys = sorted(keys) # order them in some way
for k in keys:
v = myDict[k]
我想你想要'keys.sort()'。 'sorted()'返回一個新的列表,但不修改傳遞的對象。 – ThiefMaster 2011-05-21 18:17:10
@theif - 你是對的。謝謝。 – eduffy 2011-05-21 18:18:30
你不能; dict
s是unsortable。如果您需要有序的詞典,請使用OrderedDict
。
好吧,我的錯,我會閱讀文檔。我只是把它打印出來,然後按照特定的順序排除。我認爲這與它的寫作方式有關。像php的數組。 – Qiao 2011-05-21 18:19:49
@喬這實際上是一個很好的問題。我喜歡「哦,這很容易回答文件」 - 事實並非如此。這個「微不足道的事實」在大多數地方似乎被認爲是知識。我能找到的最好的(OrderedDict,第8.3章)是「OrderedDict是一個字典,它記住了鍵被首次插入的順序。」 – 2011-05-21 18:22:05
嗯,它是這樣的:「最好把字典看作一個*無序的*鍵值對,並且要求鍵是唯一的(在一個字典中)。」來自[教程中的5.5數據結構](http://docs.python.org/tutorial/datastructures.html#dictionaries)。 – 2011-05-21 18:29:03