2016-05-05 3 views
1

Pythonの最大のリストIは次のようにPythonでビルトインMAX()関数を使用してい

max(test_sentences, key=test_sentences.get) 

何のために私はそれを使用していますが、リスト内の最大値を見つけることです(test_sentences )。 私は、キーの隣にあるリストの[0]の位置で最大値を持つキーを取り戻したいと思います。 例(PLS 'Uを無視):

{u'my name is tomi': [0, 1, 10, u'my', u'name', u'is', u'tomi'], 
u'your name is tomi': [0, 1, 10, u'your', u'name', u'is', u'tomi'], 
u'hello bello bye fine': [5, 42, 10, u'hello', u'bello', u'bye', u'fine'], 
u'okkay tomi': [1, 1, 10, u'okkay', u'tomi'], 
u'fine my name is tomi': [15, 1, 10, u'fine', u'my', u'name', u'is', u'tomi']} 

この場合、勝者は、次のようになります。

u'fine my name is tomi' 

リストの[0]要素は15であり、これが最大となるように。

実際に私が書いたコードだけで動作します:

max(test_sentences, key=test_sentences.get) 

をしかし、私はそれがなぜ...誰かが私を助けて、それを説明していただけます...ただ、ミスを防ぎたいません。

ありがとうございました!

答えて

1

dictでmaxを呼び出すと、実際にはdictのキーに対して操作を行い、値を無視します。あなたの辞書をiterableとして扱う他の操作でも同じです。 for k in dict:などです。max(test_sentences)の場合は、辞書の最後のキーをアルファベット順に取得します。別のものを並べ替えに使用する場合は、keyで渡します。ここでは、ソートしている実際のものに値を変換する関数を提供します。 dict.get(k)dict[k]と同じですので、あなたのコードでは、各キーについてちょうど言って、あなたのdictの対応する値を取得し、これを使用して並べ替えます。リストのソート順には最初に最初の値が使用されます。これは必要なものです。

1

dict.get()は、渡されたキーの値を返します。 Pythonのシーケンスは純粋にソートされています。 2つをまとめると、[15, ...]という値のキーがmax()から返されます。

0

max関数は、最初のパラメーターとしてiterableをとり、dictを反復処理すると、すべてのキーが反復されます。これらは同じです

max(test_sentences, key=test_sentences.get) 
max(test_sentences.iterkeys(), key=test_sentences.get) 

次に、ここにはkey引数があります。これは、第1引数の各項目を比較の戻り値にマップする関数です。 keytest_sentencesの場合、test_sentences.get(key)はもちろんkeyのマップ値です。だからあなたはすべてのリストの値を比較しています。

最後に、2つのリストを比較すると、実際には各リストの各アイテムの辞書順が使用されます。あなたは最初の要素を使っていますが、実際にはそうではないと思いますが、同じ結果を得ることができます。詳細はhereをお読みください。

あなたが必要なものについては、私はそれが

max(test_sentences.iterkeys(), key=lambda key: test_sentences[key][0]) 
されるべきだと思います
関連する問題