Dam*_*iak 49 python sorting nested ordereddictionary
我试图通过'depth'键在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)
])),
])
Run Code Online (Sandbox Code Playgroud)
排序的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)
])),
])
Run Code Online (Sandbox Code Playgroud)
任何想法如何得到它?
Thi*_*ter 97
您必须创建一个新的,因为OrderedDict按插入顺序排序.
在您的情况下,代码将如下所示:
foo = OrderedDict(sorted(foo.iteritems(), key=lambda x: x[1]['depth']))
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅http://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes.
请注意Python 3,.items()而不是使用.iteritems().
Ray*_*ger 17
>>> OrderedDict(sorted(od.items(), key=lambda item: item[1]['depth']))
Run Code Online (Sandbox Code Playgroud)
有时您可能想保留初始字典而不创建新字典。
在这种情况下,您可以执行以下操作:
temp = sorted(list(foo.items()), key=lambda x: x[1]['depth'])
foo.clear()
foo.update(temp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55356 次 |
| 最近记录: |