我有一个清单
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中看到过其他类似的问题,但没有类似或容易适用于我。
答案 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)