2016-09-03 4 views
0

私は以下の形式のリストの辞書を持っています。辞書のリストの個々の列に基づく並べ替え

b = 
    {'a': [1, 1, 1], 
    'c': [1, 0, 0], 
    'b': [1, 0, 1], 
    'e': [0, 0, 1], 
    'd': [0, 0, 0], 
    'g': [0, 1, 1], 
    'f': [0, 1, 0], 
    'h': [1, 1, 0] 
    } 

私が探しているのは、リストを並べ替え、リストの列に基づいて辞書を表示することです。最初の列をソートし、次に2番目の列を最後の3番目の列でソートする必要があります。

私はこのようなリストを望みます。

b = 
    {'d': [0, 0, 0], 
    'e': [0, 0, 1], 
    'f': [0, 1, 0], 
    'g': [0, 1, 1], 
    'c': [1, 0, 0], 
    'b': [1, 0, 1], 
    'h': [1, 1, 0], 
    'a': [1, 1, 1] 
    } 

私はこのようなリストの最初の値の並べ替えを行うことができます。

sorted(b.items(), key=lambda e:e[1][0]) 

と同様に、第2および第3のものを行う。しかし、最初の列をソートすると、2番目と3番目の列はソートされません。

だから、私はこれをしました。

sorted(b.items(), key=lambda e:e[1]) 

これは私に正しい答えを与えます。しかし、私はこれがどのように機能しているのか分かりません。ここで

第二に、私がしなければ、

sorted(b.values(), reverse=True, key=lambda e:e[0]) 

残りの二つの列がソートされていませんが、それは価値の唯一の最初の列をソートします。

私は自分の答えを持っていますが、これについての説明はいくつかのケースでは機能しており、他の人では機能しません。

ありがとうございます。

+0

私はあなたが何を求めているのか分からず、何を並べていて、どのような出力を期待していますか? –

+1

@PadraicCunningham、私は私の質問でそれをお読みください。私は辞書のリストをソートしようとしています。 –

+0

あなたはそれぞれのリスト/値である 'e [1]'でリストをソートしていますが、それについて何を理解していませんか? –

答えて

1
sorted(b.items(), key=lambda e:e[1]) 

は、ラムダがリスト全体を返すために機能します。 [1, 1, 1],[1, 0, 0]。リストをソートするためのPythonのデフォルトルールはまさに必要なものです。リストの最初の「列」またはリストの項目によってソートされます.2つのリストが同じ最初の項目を持つ場合、2番目の項目などでソートされます。 。

1

この:

sorted(b.items(), key=lambda e:e[1]) 

作品、それは比較のためのキーとして、各リストの全体を使用しているため。 Pythonは、デフォルトでリストを「辞書編集的に」比較する方法を知っています。つまり、最初の要素を比較し、等しい場合は次の要素に進みます。単語をアルファベット順にソートするのと同じです。

関連する問題