【问题标题】:How to reorder the keys of a dictionary?如何重新排序字典的键?
【发布时间】:2020-11-17 23:36:53
【问题描述】:

列表中有多个字典。我想用自定义键对字典进行排序。就我而言,我想使用Date 键对其进行排序。我的意思是把Date 键移到第一个位置。使用Date 键对字典进行排序的有效方法是什么?

PS:我不想按Date 的值排序。

[
   {
      
      "AmazonS3":6.54,
      "AmazonEC2":27.55,
      "AmazonCloudWatch":0.51,
      "Date":"2020-07-01"
   },
   {
      "AmazonEC2":27.8,
      "Date":"2020-07-02"
   },
   {
      "AmazonElastiCache":0.01,
      "AmazonEC2":35.34,
      "Date":"2020-07-03"
   }
]

预期输出:

...
   {
      "Date":"2020-07-03",
      "AmazonElastiCache":0.01,
      "AmazonEC2":35.34
   }
...

【问题讨论】:

  • 为什么要这样做?你不能用 0、1、2 来索引一个 dict... 那你为什么要依赖键的定位呢?
  • 这能回答你的问题吗? sorting dictionary python 3
  • @Asocia 这听起来很模糊,但我使用json2html 模块将此数据转换为 HTML 并向用户发送电子邮件。我想在表格顶部显示日期。这是一个包含 30 多个字典的复杂列表。
  • 您是否正在创建要转换的 json?如果是这样,那么只需按照您想要的顺序将项目添加到字典中。或关注@BramVanroy 链接的帖子的第二个答案
  • 我正在使用json.dumps(my_data)

标签: python python-3.x dictionary ordereddictionary


【解决方案1】:

如果您使用的是 Python3.6 或更高版本,您可以这样做:

print([{"Date": di["Date"], **di} for di in my_list])
[ { '日期': '2020-07-01', “亚马逊S3”:6.54, “亚马逊EC2”:27.55, “亚马逊云观察”:0.51 }, { '日期': '2020-07-02', “亚马逊EC2”:27.8 }, { '日期': '2020-07-03', 'AmazonElastiCache': 0.01, “亚马逊EC2”:35.34 } ]

【讨论】:

    【解决方案2】:

    相信你可以使用OrderedDict's move_to_end to do this.

    dict = OrderedDict.fromkeys("qwerty")
    dict.move_to_end("t", last=False)
    "".join(dict.keys())
    "tqwery"
    

    【讨论】:

    • 很好,但最好不要使用名称dict。你可以省略.keys()
    • @Asocia 的答案更好,更有效,我建议使用他们的。
    【解决方案3】:

    您无法对字典进行排序,因为字典没有顺序。

    【讨论】:

    • 自 Python3.7 以来字典确实有顺序。而且collections中有一个数据类型叫OrderedDict
    • 应该是“Python3.6 起”,但我无法编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多