2017-12-07 13 views
0

名前のタプルのリストを最初と最後に並べ替えるのは苦労しています。私は姓でリストを並べ替えると同じ姓がある場合、それらの名前のサブリストはファーストネームで配置する必要があります。最初の部分はsortedとkey = get_key1でかなり簡単でしたが、私は問題の2番目の部分を完了するのに苦労しています。リスト内のサブリストの並べ替え

このようなリスト:

[('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')] 

は以下のように出てくるはずです。

[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Gil', 'Cohen'), ('Haim', 'Cohen'), ('Tom', 'Haim'), ('Ben', 'Levi'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')] 

私が得たベストです:あなたが戻ると

[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Haim', 'Cohen'), ('Gil', 'Cohen'), ('Tom', 'Haim'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Ben', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')] 

はあなたに

+1

私たちのプログラミング言語は、あなたの使用してコード – Bambuk

+0

を表示しますか? –

+0

私はPythonを使用して – Dean

答えて

2

ありがとうございましたタプルをキーとして最初にソートします要素、次に2番目の要素で構成されます。最初の姓でソートしたい場合、最初の名前は(last name, first name)を返す必要があります。

l = [('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')] 

def get_key1(x): 
    return (x[1], x[0]) 

print(sorted(l, key=get_key1)) 
+0

優秀!どうもありがとう、これは私が探していたものです。 – Dean

1

あなたはlistsort()方法を使用してハエのリストを並べ替えることができます。

inlist = [('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')] 
inlist.sort(key = lambda i: (i[1],i[0])) 
print(inlist) 

出力:

[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Gil', 'Cohen'), ('Haim', 'Cohen'), ('Tom', 'Haim'), ('Ben', 'Levi'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')] 

@cezarによって提案lambdaに代わるものは、itemgetterだろうoperatorモジュール:

from operator import itemgetter 

inlist = [('Tom','Haim'),('Eli','Levi'),('Eli','Cohen'),('Moshe','Levi'),('Haim','Cohen'),('Dina','Ram'),('Tova','Ben'),('Ben','Levi'),('Gil','Cohen'),('Eli','Ram')] 

inlist.sort(key = itemgetter(1,0)) 
print(inlist) 

出力:

[('Tova', 'Ben'), ('Eli', 'Cohen'), ('Gil', 'Cohen'), ('Haim', 'Cohen'), ('Tom', 'Haim'), ('Ben', 'Levi'), ('Eli', 'Levi'), ('Moshe', 'Levi'), ('Dina', 'Ram'), ('Eli', 'Ram')] 
+0

良い答え!しかし、私は 'itemgetter'(' from operator import itemgetter')を使って若干異なるバージョンを好むでしょう。コマンドは 'inlist.sort(key = itemgetter(1、0))'のようになります。私はそれが 'lambda 'を使うよりも分かりやすいと思う。 – cezar

+0

@cezar指摘に感謝します。私は私の答えを更新します。 –

関連する問題