猿问

按日期排序对象列表

我有一个看起来像这样的字典列表


"Tournaments": [

      {

        "Scrambling": "61.90",

        "Total_Putts_GIR": 85,

        "SG_Putting": 0.99,

        "Tournament": "Sony_Open",

        "Date": "01-09-2020"

      },

      {

        "Scrambling": "68.75",

        "Total_Putts_GIR": 93,

        "SG_Putting": 1.1,

        "Tournament": "Waste_Management",

        "Date": "01-30-2020"

      },

      {

        "Scrambling": "64.71",

        "Total_Putts_GIR": 70,

        "SG_Putting": -0.26,

        "Tournament": "WGC_Mexico",

        "Date": "02-20-2020"

      },

      {

        "Scrambling": "57.14",

        "Total_Putts_GIR": 40,

        "SG_Putting": -1.45,

        "Tournament": "Charles_Schwab",

        "Date": "06-11-2020"

      },

      {

        "Scrambling": "73.68",

        "Total_Putts_GIR": 82,

        "SG_Putting": 1.65,

        "Tournament": "RBC_Heritage",

        "Date": "06-18-2020"

      },

      {

        "Scrambling": "66.67",

        "Total_Putts_GIR": 92,

        "SG_Putting": 0.34,

        "Tournament": "Rocket_Mortgage",

        "Date": "07-02-2020"

      },

      {

        "Scrambling": "83.33",

        "Total_Putts_GIR": 101,

        "SG_Putting": 1.19,

        "Tournament": "Shriners_Hospital_for_Children_Open",

        "Date": "10-08-2019"

      }

    ]

我用了


for obj in player_stats:

    for tournament in obj['Tournaments']:

        obj['Tournaments'].sort(key=operator.itemgetter('Date'))

然而,为了对它们进行排序,它将 2019 年放在了底部。当我添加它时reverse=True,它也会反转月份。我尝试使用obj['Tournaments'].sort(key=lambda x: tournament['Date']),但这只会以相同的顺序返回字典。我需要返回按 2019 年、2020 年排序,然后按月排序,然后按天排序的字典列表。


阿晨1998
浏览 120回答 3
3回答

紫衣仙女

使用 YYYYMMDD 格式的排序键。(您的日期格式为 MM-DD-YYYY。)obj['Tournaments'].sort(key=lambda t:                        t["Date"][6:] + t["Date"][:2] + t["Date"][3:5])print(list(t["Date"] for t in obj["Tournaments"]))给出:['10-08-2019', '01-09-2020', '01-30-2020', '02-20-2020', '06-11-2020', '06-18-2020', '07-02-2020']

UYOU

日期表示为字符串并按字典顺序排序。这就是为什么,例如,'10-08-2019'在 之后排序'07-02-2020'。一种解决方法是将字符串解析为datetime.datetime对象以进行排序。from datetime import datetime...        key=lambda x: datetime.strptime(x['Date'], '%m-%d-%Y')        obj['Tournaments'].sort(key=key)

婷婷同学_

解决方案另一种选择是使用pandas库对字典进行排序。现在,这可能是有争议的,因为有时您可能不需要引入熊猫,但是,这取决于您正在处理的问题/需求的类型。使用熊猫通常也更容易可视化和处理数据。我会留给你来决定你是否想使用 pandas 来完成这个任务,同时我会留下一个注释,说明你如何轻松地可视化结果并用 pandas 对其进行排序。import pandas as pdfor obj in player_stats:        obj['Tournaments'] = pd.DataFrame(obj['Tournaments']).sort_values(['Date']).T.to_dict(orient='records')加载字典列表并对其进行排序一线解决方案是这样的:pd.DataFrame(obj['Tournaments']).sort_values(['Date']).to_dict(orient='records')让我们分解它以了解它在做什么。A、排序DataFramedf = pd.DataFrame(obj['Tournaments']).sort_values(['Date'])print(df) # print sorted dataframeB. 将 the 转换DataFrame为 adict# convert DataFrame to dictd = df.to_dict(orient='records') # print dictionary using json libraryprint(json.dumps(d, indent=2)输出:[{'Date': '01-09-2020',  'SG_Putting': 0.99,  'Scrambling': '61.90',  'Total_Putts_GIR': 85,  'Tournament': 'Sony_Open'}, {'Date': '01-30-2020',  'SG_Putting': 1.1,  'Scrambling': '68.75',  'Total_Putts_GIR': 93,  'Tournament': 'Waste_Management'}, {'Date': '02-20-2020',  'SG_Putting': -0.26,  'Scrambling': '64.71',  'Total_Putts_GIR': 70,  'Tournament': 'WGC_Mexico'}, {'Date': '06-11-2020',  'SG_Putting': -1.45,  'Scrambling': '57.14',  'Total_Putts_GIR': 40,  'Tournament': 'Charles_Schwab'}, {'Date': '06-18-2020',  'SG_Putting': 1.65,  'Scrambling': '73.68',  'Total_Putts_GIR': 82,  'Tournament': 'RBC_Heritage'}, {'Date': '07-02-2020',  'SG_Putting': 0.34,  'Scrambling': '66.67',  'Total_Putts_GIR': 92,  'Tournament': 'Rocket_Mortgage'}, {'Date': '10-08-2019',  'SG_Putting': 1.19,  'Scrambling': '83.33',  'Total_Putts_GIR': 101,  'Tournament': 'Shriners_Hospital_for_Children_Open'}]虚拟数据为了可重复性,我更愿意记录问题中提供的样本/虚拟数据以及用于答案的数据。obj = {    "Tournaments": [      {        "Scrambling": "61.90",        "Total_Putts_GIR": 85,        "SG_Putting": 0.99,        "Tournament": "Sony_Open",        "Date": "01-09-2020"      },      {        "Scrambling": "68.75",        "Total_Putts_GIR": 93,        "SG_Putting": 1.1,        "Tournament": "Waste_Management",        "Date": "01-30-2020"      },      {        "Scrambling": "64.71",        "Total_Putts_GIR": 70,        "SG_Putting": -0.26,        "Tournament": "WGC_Mexico",        "Date": "02-20-2020"      },      {        "Scrambling": "57.14",        "Total_Putts_GIR": 40,        "SG_Putting": -1.45,        "Tournament": "Charles_Schwab",        "Date": "06-11-2020"      },      {        "Scrambling": "73.68",        "Total_Putts_GIR": 82,        "SG_Putting": 1.65,        "Tournament": "RBC_Heritage",        "Date": "06-18-2020"      },      {        "Scrambling": "66.67",        "Total_Putts_GIR": 92,        "SG_Putting": 0.34,        "Tournament": "Rocket_Mortgage",        "Date": "07-02-2020"      },      {        "Scrambling": "83.33",        "Total_Putts_GIR": 101,        "SG_Putting": 1.19,        "Tournament": "Shriners_Hospital_for_Children_Open",        "Date": "10-08-2019"      }    ]}
随时随地看视频慕课网APP

相关分类

Python
我要回答