2016-07-05 2 views
0

リスト中:Pythonのソート複雑リストマイリスト

a = [[["a", 0], ["b", 7], ['c', 3]], 9, [['d', 0], ['e', 5], ['f', 7]], 5, [['g', 8], ['h', 3]], 3, [['i', 0], ['j', 1], ['k', 3]], 3] 

私は「]]、」のような上記のリストとして後数でリストをソートしたい:9、5、3、3 私が試した:

a.sort(key=lambda x: x[1]) 

しかし、私はエラーました:例外TypeError: 'をint型オブジェクトは属性がありません 'GetItem関数を'

助けてください、ありがとう!

+3

まあ、 '3'の最初の要素は何ですか?これはうまくいかないでしょう。なぜなら、あなたはリストと同様に整数を持っているからです。 –

+0

さて、私はそれを得た!ありがとう! –

答えて

5

あなたの問題はあなたのintがリストに関連付けられていないことです。現在[(list, int), (list, int), (list, int), ...]の代わりに[list, int, list, int, list, int, ...]があります。あなたのコードによってあなたのリストが生成された場合は、それを出力リストとintのペアに書き換えてみてください。そうでなければ、あなたのこのリストで

iterable = iter(a) 
new_list = list(zip(iterable, iterable)) 
new_list.sort(key=lambda k: k[1]) 
+0

これはうまくいきますが、これが好きかどうかは分かりません。実装の詳細である "zip"の内部作業に依存しています。 – jsbueno

+2

いいえ、これはちょうど 'zip'が動作する方法です。 'zip'は各引数を循環し、次の項目を返すためにそれぞれの引数から' next() 'をとります。 '' list1、list2 = zip(* many_pairs) 'はこれで正確に動作します.'zip'は' many_pairs'の各ペアの最初の項目を 'list1'を形成するために取り出し、次に各項目の2番目の項目に対して同じことを行います。 'list2'を作成します。 –

+1

OK - 動作は実際には 'zip'の仕様です - iterablesの左から右への評価順序は保証されています" – jsbueno

0
a = [[["a", 0], ["b", 7], ['c', 3]], 9, [['d', 0], ['e', 5], ['f', 7]], 5, [['g', 8], ['h', 3]], 3, [['i', 0], ['j', 1], ['k', 3]], 3] 

時点であなたのリスト2をステップ実行して、新しいリストを再生しようと、数字と内側-リストは、メインリストの独立した要素です。 S、ソートができません - それは "リンゴ"と "オレンジ"です - あなたが次の数字で各内側のリストをグループ化し、それらを並べ替える場合は、別の履歴です。

b = [a[i: i +2] for i in range(0, len(a), 2)] 

そして今:グループに

b.sort(key x=lambda x[1]) 
関連する問題