基于两个字典对列表元素进行排序

2024-09-30 18:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对以下列表进行排序:

L = ['Z3', 'X3','V3','M0' ..., 'F2'] 

根据这些规则,我在以下两个词典中进行了定义:

dicMonths = {'F':1,'G':2,'H':3,'J':4,'K':5,'M':6,'N':7,'Q':8,'U':9,'V':10,'X':11,'Z':12}
dicYears = {'2':2022, '1':2021, '0':2020, '9':2019, '8':2018, '7':2017, '6':2016, '5':2015, '4':2014, '3':2013}

我应用了以下代码,但不起作用:

aa = [(elt[0], elt[1]) for elt in L]
sorted(aa, key= lambda x,y : (dicMonths[x], dicYears[y]))

它给了我以下错误:

TypeError: () missing 1 required positional argument: 'y'

我想让它给我一个分类列表,如下所示:

['F3', 'G3', 'H3', 'J3', 'K3', 'M3', 'N3', 'Q3', 'U3', 'V3', 'X3', 'Z3', 'F4', ...]

我如何解决这个问题


Tags: 代码列表定义排序规则v3词典f2
2条回答

@flakes的建议非常优雅,但可能不会产生所需的输出,因为它让月份优先于年份。 但是,根据问题中提到的预期产出,年份应优先于月份,例如“Z3”<;'F4'

这可以通过轻微的调整来实现:

sorted(L, key=lambda l: (dicYears[l[1]], dicMonths[l[0]]))

您为key参数提供了一个不兼容的函数key接受接受一个参数并返回另一个参数的函数。如果希望这样做,则需要将tuple参数作为单个值进行访问

此外,您不需要将L作为单独的步骤进行拆分。试试这个:

sorted(L, key=lambda l: (dicMonths[l[0]], dicYears[l[1]]))

相关问题 更多 >