32

私はリストを持っています

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

DINT1.2.3の順に並べ替えたいINTBOOL

結果:

[['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]])

ここで行っているのは、リスト全体ではなく、リスト内の各要素に整数を返すことによってソートする新しい要素を提供することだけです。インラインの3値式を使用することもできますが、それでは少し扱いに​​くくなります。

于 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

それは無秩序な順序ではないので、それをソートできる単一の関数はないと思いますが、新しいリストを作成してから追加することができます。これは一種の安価な方法です。しかし、それは仕事を成し遂げます。

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 に答える