【发布时间】:2021-09-27 05:43:48
【问题描述】:
我有以下字典,我需要对字典中的嵌套字典进行排序。
meta = {'task': {'id': 'text',
'name': 'text',
'size': '',
'mode': 'interpolation',
'overlap': '5',
'bugtracker': '',
'created': '',
'updated': '',
'start_frame': '',
'stop_frame': '',
'frame_filter': '',
'labels': {'label': {'name': 'text',
'color': 'text',
'attributes': {'attributes': {'name': 'text',
'mutable': 'False',
'input_type': 'text',
'default_value': '',
'values': '',}}}}}}
meta = collections.OrderedDict(meta)
我尝试使用来自here 的答案,使用如下所示的列表:
meta = {'task': [('id', 'text'),
('name', 'text'),
('size',''),
('mode', 'interpolation'),
('overlap', '5'),
('bugtracker', ''),
('created', ''),
('updated', ''),
('start_frame', ''),
('stop_frame', ''),
('frame_filter', '')]}
但这不适用于嵌套在嵌套字典中的字典。如何将整个字典转换为 OrderedDict,甚至是最里面的嵌套字典?
附:我感觉here 的答案是我需要的,但我似乎无法弄清楚terminal 和lhs 的变量是什么。如果有人可以提供帮助,那也将非常有帮助。
【问题讨论】:
-
试试:
meta = json.loads(json.dumps(meta), object_pairs_hook=OrderedDict) -
您确定需要
OrderedDict吗?OrderedDict在相等性测试中考虑键顺序;dict没有。否则,从 Python 3.7 开始,两者之间没有区别。 -
@chepner 我需要一个 OrderedDict,因为我将它转换为 XML,并且顺序应该与字典中的键相同
-
从 Python 3.7 开始,您可以使用常规的
dict来做到这一点;记住键的插入顺序以进行迭代。 -
例如,
{a: 1, b: 2}.keys() == [a, b]现在得到保证,无论a和b有什么值。它不再依赖用于将a和b插入dict的哈希值。
标签: python dictionary