2014-11-13 20 views
5

我可以找到的所有示例(in the documentation等)通過將數據傳遞給構造函數來定義OrderedDicts。從文檔:是否可以使用預定義的排序機制在Python中初始化一個空的OrderedDict?

# regular unsorted dictionary 
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2} 

# dictionary sorted by key 
OrderedDict(sorted(d.items(), key=lambda t: t[0])) 
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) 

在另一方面,可以通過提供無參數的構造,這導致它保存在哪個鍵,值對添加順序初始化的OrderedDict。

我在尋找一種類似於下面的構造,除非沒有「d.items()」。從本質上講,我要求它記住一個機制而不提供它的例子,這聽起來可能很瘋狂。我唯一的選擇是通過提供一個初始的「d」(下)與單個項目來「破解」這個選項,還是有更好的方法?

OrderedDict(sorted(d.items(), key=lambda t: t[0])) 

謝謝!

+0

是的,這是默認行爲? –

+2

排序字典在插入時不會重新排序其內容。他們記得插入順序並且可以排序,但是他們不僅在添加密鑰時進行自動排序。爲此,您正在尋找類似於SortedCollection的東西。 IIRC有一個使用對分模塊的配方(http://code.activestate.com/recipes/577197-sortedcollection/),但OrderedDict本身還不夠。 –

+1

您可能可以推出自己的產品,也許可以考慮使用['heapq'](https://docs.python.org/2/library/heapq.html#module-heapq)在內部保留排序 – GP89

回答

1

OrderedDict只有一個排序算法:插入順序。不管什麼訂單,OrderedDict的訂單都是OrderedDict

如果您需要其他方法,您可以編寫您的dict子類,或者只是一個排序功能,您可以在訂單實際重要時應用。

相關問題