蟒蛇。基于两个键和一个字典对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列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

python 蟒蛇字典排序排序

有没有办法在我的基于 django 的应用程序上打印字典键和相应的值列表?

我们如何根据 value 中的两个字段对字典<List<int>、List<int>> 进行排序

如何按字典中的值对字典列表进行排序? [复制]

根据列表中的元素对列表作为值的字典进行排序

两个字典(键和值)的递归差异?