如何重新排序字典的键?

7

我有一个包含多个字典的列表,我想按照自定义键对字典进行排序。在我的情况下,我想使用 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
   }
...

1
为什么要这么做呢?你不能用0、1、2等来索引字典,那你为什么想要依靠键的位置呢? - Asocia
1
这个回答解决了你的问题吗?Python 3中的字典排序 - Bram Vanroy
@Asocia 这听起来有点模糊,但是我正在使用 json2html 模块将这些数据转换为 HTML 并通过电子邮件发送给用户。我想在表格顶部显示日期。这是一个包含 30 多个字典的复杂列表。 - Muhaddis
你正在创建要转换的JSON吗?如果是这样,那么只需按照所需顺序将项目添加到字典中即可。或者按照@BramVanroy链接的帖子的第二个答案进行操作。 - plum 0
我正在使用 json.dumps(my_data) - Muhaddis
你不是在排序字典,而是在排序它们的列表。有标准的方法可以对列表进行排序,这将允许你完全做到所需的操作(提示:通常称为“键”函数)。 - martineau
3个回答

9
如果你正在使用Python版本(即3.7或更高版本)来保留键插入顺序,你可以这样做:
print([{"Date": di["Date"], **di} for di in my_list])
[
  {
     '日期': '2020-07-01', 
     'AmazonS3': 6.54, 
     'AmazonEC2': 27.55, 
     'AmazonCloudWatch': 0.51
  }, 
  {
     '日期': '2020-07-02', 
     'AmazonEC2': 27.8
  }, 
  {
     '日期': '2020-07-03', 
     'AmazonElastiCache': 0.01,  
     'AmazonEC2': 35.34
  }
]

3

2
好的,但最好不要使用名称 dict。而且你可以省略 .keys() - Kelly Bundy
1
@Asocia的回答更好,更有效率,我建议使用他们的。 - Spaceglider

-4

字典无法排序,因为它们没有顺序。


10
自 Python3.7 起,字典确实有序。并且在 collections 模块中有一种叫做“OrderedDict”的数据类型。 - Asocia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接