2011-11-07 69 views
37

我想排序OrderedDict OrderedDict通過'深度'鍵。 有沒有解決方案來排序字典?如何排序OrderedDict OrderedDict - Python

OrderedDict([ 
    (2, OrderedDict([ 
    ('depth', 0), 
    ('height', 51), 
    ('width', 51), 
    ('id', 100) 
    ])), 
    (1, OrderedDict([ 
    ('depth', 2), 
    ('height', 51), 
    ('width', 51), 
    ('id', 55) 
    ])), 
    (0, OrderedDict([ 
    ('depth', 1), 
    ('height', 51), 
    ('width', 51), 
    ('id', 48) 
    ])), 
]) 

排序字典應該是這樣的:

OrderedDict([ 
    (2, OrderedDict([ 
    ('depth', 0), 
    ('height', 51), 
    ('width', 51), 
    ('id', 100) 
    ])), 
    (0, OrderedDict([ 
    ('depth', 1), 
    ('height', 51), 
    ('width', 51), 
    ('id', 48) 
    ])), 
    (1, OrderedDict([ 
    ('depth', 2), 
    ('height', 51), 
    ('width', 51), 
    ('id', 55) 
    ])), 
]) 

任何想法如何得到它?

回答

67

由於OrderedDict按插入順序排列,你將不得不建立一個新的。

在你的情況下,代碼是這樣的:

foo = OrderedDict(sorted(foo.iteritems(), key=lambda x: x[1]['depth'])) 

更多的例子見http://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes

+2

如果任何字典沒有「深度」作爲關鍵字,這將導致異常。這可能是需要的。如果不是,則可以通過使用「get」來假定默認密鑰。 – TomOnTime

+5

請注意,這裏'[1]'是指foo的值,而不是它的鍵,它將是'[0]' – emisilva

15
>>> OrderedDict(sorted(od.items(), key=lambda item: item[1]['depth']))