OrderedDictのOrderedDictを'depth'キーでソートしようとしています。その辞書をソートする解決策はありますか?
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)
])),
])
それを取得する方法はありますか?
OrderedDict
は挿入順序でソートされるため、新しいものを作成する必要があります。
あなたの場合、コードは次のようになります。
_foo = OrderedDict(sorted(foo.iteritems(), key=lambda x: x[1]['depth']))
_
その他の例については、 http://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes を参照してください。
Python 3の場合、.items()
の代わりに.iteritems()
を使用する必要があります。
>>> OrderedDict(sorted(od.items(), key=lambda item: item[1]['depth']))
場合によっては、新しい辞書を作成せずに最初の辞書を保持したい場合があります。
その場合、次のことができます。
temp = sorted(list(foo.items()), key=lambda x: x[1]['depth'])
foo.clear()
foo.update(temp)