蟒蛇。基于两个键和一个字典对2D列表进行排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蟒蛇。基于两个键和一个字典对2D列表进行排序相关的知识,希望对你有一定的参考价值。
我正试图解决这个问题。我有一个代码的dict: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}
和一个数据样本:
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)
但我没有得到正确的结果。
答案
您需要索引到列表中才能获得年份。另外,将其转换为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]]
另一答案
你可以试试这个:
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]]
另一答案
感谢你们俩。我在代码中发现了错误。我试图在[2:4]之后将样本的元素转换为整数。我忘了只选择第一部分。 int(x [0] [2:4])而不是int(x [2:4])。
以上是关于蟒蛇。基于两个键和一个字典对2D列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在我的基于 django 的应用程序上打印字典键和相应的值列表?