labels = app.config["LABELS"]
然后print(labels)
[{'name': '', 'image': '34-4.png', 'xMax': '2287', 'xMin': '2102', 'yMin': '53', 'id': '1', 'yMax': '110'},
{'name': '', 'image': '34-4.png', 'xMax': '2414', 'xMin': '2299', 'yMin': '80', 'id': '2', 'yMax': '118'},
{'name': '', 'image': '34-4.png', 'xMax': '2193', 'xMin': '2138', 'yMin': '128', 'id': '3', 'yMax': '140'}]
实际列表更大,我如何订购这些值,以便字典以图像而不是名称开头,并且出于某种原因,它们始终以名称开头,我确实在这里检查了以前的答案,如Key Order in Python Dictionaries, orderedDict
但我不是那样插入它们,我已经拥有它们并希望改变它们(它们的顺序)
答案 0 :(得分:3)
字典(除非您运行的是python 3.7的beta版本)不是订购的。它们没有顺序概念,并且可以按任何顺序产生值,这取决于您的实现可能随每次迭代而变化。
您必须使用2元组列表或OrderedDict。要将dict更改为有序的dict,请使用
od = collections.OrderedDict(sorted(labels[index].items(), key=f))
其中f
是一个函数,它使用一个(key, value)
元组参数来定义您想要排序的方式。如果您想要的是'image'
键,请使用
f = lambda t: t[0] != 'image'
将为False
和0
(又名image
)返回True
(又名1
)其他所有密钥。
编辑:
因此,使用上面定义的labels
执行:
for index, label in enumerate(labels):
labels[index] = collections.OrderedDict(
sorted(label.items(), key=lambda t: t[0] != 'image'))
输出labels
:
[OrderedDict([('image', '34-4.png'),
('name', ''),
('xMax', '2287'),
('xMin', '2102'),
('yMin', '53'),
('id', '1'),
('yMax', '110')]),
OrderedDict([('image', '34-4.png'),
('name', ''),
('xMax', '2414'),
('xMin', '2299'),
('yMin', '80'),
('id', '2'),
('yMax', '118')]),
OrderedDict([('image', '34-4.png'),
('name', ''),
('xMax', '2193'),
('xMin', '2138'),
('yMin', '128'),
('id', '3'),
('yMax', '140')])]