2016-05-05 11 views
1

Ich bin mit dem Einbau-max() Funktion in Python wie:Python max Liste in einem Wörterbuch

max(test_sentences, key=test_sentences.get) 

Was ich verwende es für ist ein Maximalwert in einer Liste (test_sentences zu finden) eines Wörterbuchs. Ich möchte diesen Schlüssel zurückholen, der den größten Wert an der Position [0] in der Liste neben dem Schlüssel hat. Ein Beispiel (pls ignorieren 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']} 

In diesem Fall Gewinner wäre:

u'fine my name is tomi' 

wie die [0] Element der Liste 15 ist, und dies ist die beste.

Eigentlich der Code, den ich schrieb funktioniert einfach:

max(test_sentences, key=test_sentences.get) 

Aber ich verstehe es nicht, warum ... Kann mir bitte jemand helfen und zu erklären, es ... Ich will nur, Fehler zu vermeiden.

Vielen Dank!

Antwort

1

Wenn Sie max bei einem Diktat aufrufen, führen Sie tatsächlich eine Operation mit den Tasten des Diktats aus und ignorieren die Werte. Gleiches gilt für andere Operationen, die Ihr Wörterbuch als iterierbar behandeln, z. for k in dict: usw. Wenn Sie nur max(test_sentences) tun, erhalten Sie nur den letzten Schlüssel Ihres Wörterbuchs (in alphabetischer Reihenfolge). Wenn Sie nach etwas anderem sortieren möchten, übergeben Sie es mit key, wo Sie eine Funktion zur Verfügung stellen, um Ihren Wert zu dem tatsächlichen Ding zu verwandeln, nach dem Sie sortieren. dict.get(k) ist das gleiche wie dict[k], also in Ihrem Code, nur für jeden Schlüssel zu sagen, erhalten Sie den entsprechenden Wert aus Ihrem Diktat, und verwenden Sie dies zum Sortieren nach. Und die Sortierreihenfolge in Listen verwendet zuerst den ersten Wert, was Ihre Anforderung ist.

1

dict.get() gibt den Wert für den übergebenen Schlüssel zurück. Sequenzen in Python sind naiv sortiert. Das Zusammenfügen der beiden bedeutet, dass der Schlüssel mit dem Wert [15, ...] von max() zurückgegeben wird.

0

Die Funktion max akzeptiert einen iterierbaren Wert als ersten Parameter, und wenn Sie über eine dict iterieren, werden alle iterierten Schlüssel abgerufen. Das sind also die gleichen

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

Dann ist hier das key Argument. Es ist eine Funktion, die jedes Element im ersten Argument dem Rückgabewert zum Vergleichen zuordnet. Für jede key in test_sentences, test_sentences.get(key) ist natürlich der abgebildete Wert der key. Sie erhalten also alle Listenwerte verglichen.

Schließlich, wenn Sie zwei Listen vergleichen, verwendet der Vergleich tatsächlich lexikographische Reihenfolge für jedes Element in jeder Liste. Sie denken, Sie verwenden die ersten Elemente, aber eigentlich nicht, obwohl Sie das gleiche Ergebnis erhalten könnten. Bitte lesen Sie here für weitere Details.

Für das, was Sie brauchen, ich glaube, es

max(test_sentences.iterkeys(), key=lambda key: test_sentences[key][0]) 
sein sollte