Как отсортировать OrderedDict из OrderedDict - Python
Я пытаюсь отсортировать OrderedDict в OrderedDict по ключу "глубина". Есть ли решение для сортировки этого словаря?
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)
])),
])
Сортировка dict должна выглядеть так:
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)
])),
])
есть идеи как его получить?
3 ответа
Решение
Вам придется создать новый, так как OrderedDict
сортируется по порядку вставки.
В вашем случае код будет выглядеть так:
foo = OrderedDict(sorted(foo.iteritems(), key=lambda x: x[1]['depth']))
См. http://docs.python.org/dev/library/collections.html для получения дополнительных примеров.
Примечание для 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)