如何按我的订单多次对列表进行排序?

时间:2017-12-07 09:20:38

标签: python-3.x list sorting

我刚刚开始用python编写代码。 我试图将我的列表排序为我已经制作的字典。 这是字典:

X={'Si':6,'La':5,'Sol':4,'Fa':3,'Mi':2,'Re':1,'Do':0}

我有一个这样的清单:

A=[['Do', 'Do'], ['Re', 'Do'], ['Do', 'Mi'], ['Si', 'Do'], ['Fa', 'Fa'], ['Mi', 'Fa'], ['Sol', 'Si']]

我打算将此列表排序为:

[['Do', 'Do'], ['Do', 'Mi'], ['Re', 'Do'], ['Mi', 'Fa'], ['Fa', 'Fa'], ['Sol', 'Si'], ['Si', 'Do']]

我的意思是通过排序第一个元素然后排序第二个元素和第三个元素来排序这个列表......

我尝试使用此代码来实现此目的:

A.sort(key=lambda val: X[val[0]])

因此,我可以按第一项排序列表,但对于第二项或第三项(如果内部列表包含更多项目),我无法对它们进行排序。 我不是Groovy程序员,所以请提前帮助。

1 个答案:

答案 0 :(得分:1)

多个"字段排序"

X = {'Si':6,'La':5,'Sol':4,'Fa':3,'Mi':2,'Re':1,'Do':0}
A = [['Do', 'Do'], ['Re', 'Do'], ['Do', 'Mi'], ['Si', 'Do'], ['Fa', 'Fa'], ['Mi', 'Fa'], ['Sol', 'Si']]
result = sorted(A, key=lambda lst: tuple(X[i] for i in lst))

print(result)

输出:

[['Do', 'Do'], ['Do', 'Mi'], ['Re', 'Do'], ['Mi', 'Fa'], ['Fa', 'Fa'], ['Sol', 'Si'], ['Si', 'Do']]