簡體   English   中英

蟒蛇。 根據兩個鍵和一個字典對2D列表進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM