为了账号安全,请及时绑定邮箱和手机立即绑定

按日期排序对象列表

按日期排序对象列表

阿晨1998 2023-03-16 15:38:01
我有一个看起来像这样的字典列表"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 年排序,然后按月排序,然后按天排序的字典列表。
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

使用 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']



查看完整回答
反对 回复 2023-03-16
?
UYOU

TA贡献1878条经验 获得超4个赞

日期表示为字符串并按字典顺序排序。这就是为什么,例如,'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)


查看完整回答
反对 回复 2023-03-16
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

解决方案

另一种选择是使用pandas库对字典进行排序。现在,这可能是有争议的,因为有时您可能不需要引入熊猫,但是,这取决于您正在处理的问题/需求的类型。使用熊猫通常也更容易可视化和处理数据。


我会留给你来决定你是否想使用 pandas 来完成这个任务,同时我会留下一个注释,说明你如何轻松地可视化结果并用 pandas 对其进行排序。


import pandas as pd


for 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、排序DataFrame

df = pd.DataFrame(obj['Tournaments']).sort_values(['Date'])

print(df) # print sorted dataframe

//img1.sycdn.imooc.com//6412c7eb00015d5c06540242.jpg

B. 将 the 转换DataFrame为 adict

# convert DataFrame to dict

d = df.to_dict(orient='records') 

# print dictionary using json library

print(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"

      }

    ]

}


查看完整回答
反对 回复 2023-03-16
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号