首页 > 解决方案 > 使用python在JSON中对日期“yyyy-mm-dd”进行排序

问题描述

我有一个关于使用 python 在 JSON 中进行数据排序的问题。这是我拥有的数据:

{
    "DE":[{
            "Date": "2020-01-18",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
        {
            "Date": "2020-01-15",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        },
       {
            "Date": "2020-01-17",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
        {
            "Date": "2020-01-13",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        },
       ...],

     "AL":[{
            "Date": "2020-01-18",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
        {
            "Date": "2020-01-15",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        },
       {
            "Date": "2020-01-17",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
        {
            "Date": "2020-01-13",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
            ....
        }],
         ....
}

"DE是州"AL"的名称,共有 50 个。在每个州内,都有一个大列表,以字典的形式保存每一天的数据。我的问题是"Date"在这种情况下如何对它进行排序,以便它可以更改为:

{
    "DE":[{
            "Date": "2020-01-13",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        }, 
         {
            "Date": "2020-01-15",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        },
         {
            "Date": "2020-01-17",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
         {
            "Date": "2020-01-18",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
       ...],

     "AL":[{
            "Date": "2020-01-13",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        }, 
         {
            "Date": "2020-01-15",
            "Confirmed Cases": 4,
            "Predicted Cases": 13
        },
         {
            "Date": "2020-01-17",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        },
         {
            "Date": "2020-01-18",
            "Confirmed Cases": 50,
            "Predicted Cases": 0
        }
        ...
             ],
         ....
}

我是 python 和数据处理的新手。我想了很多方法,但它们都有不同的缺陷。因此,你们能帮助我吗?非常感谢

标签: pythonjson

解决方案


答案是一个简单的for循环和sort函数。在您的情况下,您可以遍历字典中的所有条目并在它们上调用 sort ,因为它们sort将就地运行。排序通过自定义键函数工作,该函数使用Date条目作为排序键。

如果您想在排序过程中颠倒顺序,您可以reverse=Truesort调用中设置。

for _, entries in data.items():
    entries.sort(key=lambda entry: entry['Date'])

结果:

{
 'DE': [
  {'Date': '2020-01-13', 'Confirmed Cases': 4, 'Predicted Cases': 13},
  {'Date': '2020-01-15', 'Confirmed Cases': 4, 'Predicted Cases': 13},
  {'Date': '2020-01-17', 'Confirmed Cases': 50, 'Predicted Cases': 0},
  {'Date': '2020-01-18', 'Confirmed Cases': 50, 'Predicted Cases': 0}
 ],
 'AL': [
  {'Date': '2020-01-13', 'Confirmed Cases': 4, 'Predicted Cases': 13},
  {'Date': '2020-01-15', 'Confirmed Cases': 4, 'Predicted Cases': 13},
  {'Date': '2020-01-17', 'Confirmed Cases': 50, 'Predicted Cases': 0},
  {'Date': '2020-01-18', 'Confirmed Cases': 50, 'Predicted Cases': 0}
 ]}

推荐阅读