使用Python在自定义顺序中对列表进行排序

时间:2013-01-08 04:32:44

标签: python list sorting python-2.7

我有一个清单

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

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

结果:

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

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

4 个答案:

答案 0 :(得分:38)

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

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

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

答案 1 :(得分:0)

由于这不是按字母顺序排列,我不认为有一个单一的函数可以对它进行排序,但你可以做的是创建一个新的列表然后追加。这是一种廉价的方法;但它完成了工作。

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);

答案 2 :(得分:0)

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

index = [2,1,0]

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

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

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

答案 3 :(得分:-1)

     python 3.2

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

    2. sorted(mylist,reverse=True)