【问题标题】:How can i make 'image' key the first?我怎样才能使“图像”键成为第一个?
【发布时间】:2018-04-25 08:00:18
【问题描述】:
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,@987654326 @ 但我没有那样插入它们,我已经有了它们并想改变它们(它们的顺序)

【问题讨论】:

  • 你为什么需要那个?为json 序列化?
  • 可能重复Post
  • 到目前为止你有什么尝试?
  • 它不会对后面的处理阶段产生任何影响代码,但我只想先看到图像image,就这么简单。
  • 你关心每个子字典中其他键的顺序会发生什么变化吗?

标签: python dictionary flask


【解决方案1】:

字典(除非您运行的是 python 3.7 的 beta 版本)没有排序。它们没有顺序的概念,并且可以以任何顺序产生值,这取决于您的实现可能会随着每次迭代而改变。

您必须使用 2 元组列表或 OrderedDict。要将字典更改为有序字典,请使用

od = collections.OrderedDict(sorted(labels[index].items(), key=f))

其中f 是一个函数,它采用单个(key, value) 元组参数来定义您希望如何排序。如果您只想将'image' 键放在首位,请使用

f = lambda t: t[0] != 'image'

对于imageTrue(又名1)对于其他所有键将返回False(又名0)。

编辑:

所以用你上面定义的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')])]

【讨论】:

  • FWIW,普通 dict 在 Python 3.6.0+ 中保留插入顺序(在 3.6 beta 中没有)。
  • @PM2Ring 我知道 :),但我不想再混淆这件事了。
  • 我导入了收藏,我应该用什么替换 index
  • @user9686018 labels的索引......所以012,......等等依次为每个。查看我的编辑
  • 正确我有相同的输出,但我的想法是将它们保留为字典列表,就像我在我的问题中展示的一个例子一样,没有在输出中添加ordereddict或使它们成为元组形状, .
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
相关资源
最近更新 更多