[英]Python. Sort 2D list based on two keys and a dict
我正在嘗試解決此問題。 我有一個帶code:order的字典。
codes = {'JA':0,'FE':1,'MA':2,'AP':3,'MY':4,'JU':5,'JL':6,'AG':7,'SE':8,'OC':9,'NO':10,'DI':11}
以及示例od數據:
sample = [['NO15',27],['JU17',45],['FE18',-4],['AP14',7],['JA18',97]]
我想根據兩個條件對樣本進行排序。 首先,年份,也就是它,這兩個數字與月份的代碼一起出現,第二個數字與第二個數字一起出現在字典中,結果必須為:
sorted_sample = [['AP14',7],['NO15,27],['JU17',45],['JA18',97],['FE18',-4]]
我正在嘗試這個
sorted(raw, key=lambda x: (x[2:4],codes.get(x[0][:2])))
sorted(sorted(raw, key = lambda x : x[2:4], reverse = True), key = lambda x : codes.get(x[0][:2]), reverse = False)
但是我沒有得到正確的結果。
您可以嘗試以下方法:
import re
codes = {'JA':0,'FE':1,'MA':2,'AP':3,'MY':4,'JU':5,'JL':6,'AG':7,'SE':8,'OC':9,'NO':10,'DI':11}
sample = [['NO15',27],['JU17',45],['FE18',-4],['AP14',7],['JA18',97]]
final_sample = sorted(sample, key=lambda x: (int(re.findall('\d+$', x[0])[0]), codes[re.findall('^[a-zA-Z]+', x[0])[0]], x[-1]))
輸出:
[['AP14', 7], ['NO15', 27], ['JU17', 45], ['JA18', 97], ['FE18', -4]]
您需要索引列表以獲取年份。 另外,將其轉換為int
以便與數字進行比較:
>>> sorted(sample, key=lambda x: (int(x[0][2:4]), codes.get(x[0][:2])))
[['AP14', 7], ['NO15', 27], ['JU17', 45], ['JA18', 97], ['FE18', -4]]
感謝你們倆。 我在代碼中發現了錯誤。 我試圖將[2:4]之后的樣本元素轉換為整數。 我忘了只選擇第一部分。 int(x [0] [2:4])而不是int(x [2:4])。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.