Sort a list with a custom order in Python

前端 未结 4 1969
别跟我提以往
别跟我提以往 2020-12-09 08:52

I have a list

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

I want to sort it with the orde

相关标签:
4条回答
  • 2020-12-09 09:00
    SORT_ORDER = {"DINT": 0, "INT": 1, "BOOL": 2}
    
    mylist.sort(key=lambda val: SORT_ORDER[val[1]])
    

    All we are doing here is providing a new element to sort on by returning an integer for each element in the list rather than the whole list. We could use inline ternary expressions, but that would get a bit unwieldy.

    0 讨论(0)
  • 2020-12-09 09:13

    Since that is not in aphabetical order I don't think there is one single function that can sort it but what you could do is create a new list and then append. This is kind of a cheap method of doing it; but it gets the job done.

    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);
    
    0 讨论(0)
  • 2020-12-09 09:15

    Another way could be; set your order in a list:

    index = [2,1,0]
    

    and create a new list with your order wished:

    mylist = [mylist[_ind] for _ind in indx]
    
    Out[2]: [['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]
    
    0 讨论(0)
  • 2020-12-09 09:22
         python 3.2
    
        1. sorted(mylist,key=lambda x:x[1][1])
    
        2. sorted(mylist,reverse=True)
    
    0 讨论(0)
提交回复
热议问题