亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按日期排序對象列表

按日期排序對象列表

阿晨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庫對字典進行排序?,F在,這可能是有爭議的,因為有時您可能不需要引入熊貓,但是,這取決于您正在處理的問題/需求的類型。使用熊貓通常也更容易可視化和處理數據。


我會留給你來決定你是否想使用 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

http://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 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號