32

我有一个清单

mylist = [['123', 'BOOL', '234'], ['345', 'INT', '456'], ['567', 'DINT', '678']]

DINT我想按 1. 2. INT3的顺序对其进行排序。BOOL

结果:

[['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]

我在 stackoverflow 中看到了其他类似的问题,但没有任何类似或容易适用于我的问题。

4

4 回答 4

66
SORT_ORDER = {"DINT": 0, "INT": 1, "BOOL": 2}

mylist.sort(key=lambda val: SORT_ORDER[val[1]])

我们在这里所做的只是通过为列表中的每个元素而不是整个列表返回一个整数来提供一个新元素进行排序。我们可以使用内联三元表达式,但这会有点笨拙。

于 2013-01-08T04:35:31.643 回答
2

另一种方法可能是;在列表中设置您的订单:

indx = [2,1,0]

并根据您的订单创建一个新列表:

mylist = [mylist[_ind] for _ind in indx]

Out[2]: [['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]
于 2020-11-05T11:31:04.550 回答
0

由于这不是 aphabetical 顺序,我认为没有一个函数可以对其进行排序,但您可以做的是创建一个新列表然后追加。这是一种便宜的方法;但它完成了工作。

newlist=[];
for sub_list in mylist:
     if(sub_list[1] == 'DINT']):
          newlist.append(sub_list);

for sub_list in mylist:
     if(sub_list[1] == 'INT']):
         newlist.append(sub_list);

for sub_list in mylist:
     if(sub_list[1] == 'BOOL']):
            newlist.append(sub_list);
于 2013-01-08T04:40:20.870 回答
-1
     python 3.2

    1. sorted(mylist,key=lambda x:x[1][1])

    2. sorted(mylist,reverse=True)
于 2013-01-08T18:38:21.860 回答