我是 python 新手。在 Python 中,我想首先根據“年份”鍵對字典項串列進行排序,然后使用字母數字鍵,即 P1、P2、P3。
代碼片段如下:
[
{"P9": 0, "year": 2023},
{"P13": 0, "year": 2023},
{"P10": 0, "year": 2023},
{"P11": 121200, "year": 2022},
{"P12": 0, "year": 2023},
]
哪個首先按年份升序排序變為:
[
{"P11": 121200, "year": 2022},
{"P9": 0, "year": 2023},
{"P13": 0, "year": 2023},
{"P10": 0, "year": 2023},
{"P12": 0, "year": 2023},
]
稍后再按句點鍵排序,即 P1、P2、P3 等變為:
[
{"P11": 121200, "year": 2022},
{"P9": 0, "year": 2023},
{"P10": 0, "year": 2023},
{"P12": 0, "year": 2023},
{"P13": 0, "year": 2023},
]
以上是預期的輸出,現在我不知道我該如何排序
uj5u.com熱心網友回復:
排序功能滿足您的所有需求
您可以傳遞一個關鍵函式(可呼叫)來識別正確的順序。在你的情況下:
unordered = [{'P9': 0, 'year': 2023}, {'P13': 0, 'year': 2023}, {'P10': 0, 'year': 2023}, {'P11': 121200, 'year': 2022}, {'P12': 0, 'year': 2023}]
#by year
sorted(unordered, key=lambda x: x['year'])
# out
[{'P11': 121200, 'year': 2022},
{'P9': 0, 'year': 2023},
{'P13': 0, 'year': 2023},
{'P10': 0, 'year': 2023},
{'P12': 0, 'year': 2023}]
對于期間,解決方案有點棘手,您必須確定如何選擇 P** 鍵。我們不知道這些字典是如何構建的,但做一些假設可能是這樣的:
sorted(unordered, key=lambda x: [lbl for lbl in x if lbl.startswith('P')][0] )
但這里缺乏更準確的資訊
uj5u.com熱心網友回復:
您可以使用 sorted 函式,并使用它指定一個鍵函式。但是由于您想使用兩個單獨的資料點作為鍵,您可以使用元組來構建一個鍵。
因為當比較元組時,它首先比較其中的第一個物體,如果第一個匹配,那么它會檢查第二個物體。
例子:
>>> (1,3) > (1, 4)
False
>>> (1, 4) < (2,2)
True
>>> (1, 4, 1) < (2, 1)
True
因此,以下是構建關鍵功能的方法:
>>> unordered = [{'P9': 0, 'year': 2023}, {'P13': 0, 'year': 2023}, {'P10': 0, 'year': 2023}, {'P11': 121200, 'year': 2022}, {'P12': 0, 'year': 2023}]
>>> ordered = sorted(
unordered,
key=lambda d: (d['year'], next(int(k[1:]) for k in d.keys() if k.startswith('P')))
)
>>> ordered
[{'P11': 121200, 'year': 2022}, {'P9': 0, 'year': 2023}, {'P10': 0, 'year': 2023}, {'P12': 0, 'year': 2023}, {'P13': 0, 'year': 2023}]
在這里,我只是假設您在字典中總是有一個以 開頭的鍵,P其余部分是整數。
uj5u.com熱心網友回復:
要對第一個基數years進行排序,然后對每個基數的第一個鍵進行排序,dict您可以捕獲數字并轉換為int然后排序,如下所示:
>>> sorted(lst_dct, key=lambda x: (x['year'], int(list(x.keys())[0][1:])))
[{'P11': 121200, 'year': 2022},
{'P9': 0, 'year': 2023},
{'P10': 0, 'year': 2023},
{'P12': 0, 'year': 2023},
{'P13': 0, 'year': 2023}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/490275.html
標籤:Python python-3.x 列表 排序 字典
