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

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)

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
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"
}
]
}
添加回答
舉報