2011-11-07 66 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']))