2016-04-08 16 views
-1

Ich habe diese Post 1, lesen 2, 3, aber ich kann immer noch nicht herausfinden, folgende Python-Code:wie collections.defaultdict.get Arbeit in den wichtigsten Paramter der max Aussage --- Python

>>> s = 'mississippi' 
>>> d = defaultdict(int) 
>>> for k in s: 
...  d[k] += 1 
... 
>>> lis = ['m', 'i', 's', 'p'] 
>>> max(lis, key=d.get) 
'i' 

Ich weiß, die Zeiten, in denen ein Buchstabe vorkommt, gespeichert in d. Und wenn ich eingib:

>>> d.get 
<built-in method get of collections.defaultdict object at 0x7f506ed8d710> 

Es sagte, dass get ist eine Methode. Warum verwendet es keine Klammern? Und welche Art von Datenform gibt es zurück?

+0

Wird diese Kopie eingefügt und von einer tatsächlichen interaktiven Interpreter-Sitzung, die Sie ausgeführt haben, kopiert? Es hätte nicht funktionieren sollen; Das 'Schlüssel'-Argument für 'max' ist nur ein Schlüsselwort. – user2357112

+0

@ user2357112 Entschuldigung. mein Fehler. – sydridgm

+1

Verwenden Sie [collections.Counter] (https://docs.python.org/2/library/collections.html#counter-objects). Es hat eine 'most_common()' Methode, die genau das tut, was Sie hier tun. –

Antwort

1

max akzeptiert ein Schlüsselwortargument - eine "Schlüssel" -Funktion. zB:

max(iterable, key=some_function) 

Welche (ich vermute) ist, wie Sie es verwenden (anstelle von max(iterable, function))

Der "Schlüssel" -Funktion wird für jedes Element in der iterable genannt werden und das Ergebnis der "Schlüssel" -Funktion wird verwendet, um Elemente zu vergleichen.

In diesem Fall wird das Element, für das d.get den maximalen Wert zurückgibt, zurückgegeben.

d ist Ihr Standarddict. d.get(key) gibt den Wert zurück, der diesem Schlüssel zugeordnet ist - und die Dinge, die an ihn übergeben werden, sind Schlüssel, die in d sind. Du suchst also den Schlüssel aus, der den maximalen Wert hat.

+1

Eigentlich ist es komisch, denn 'max (lis, d.get)' sollte '['m', 'i', 's', 'p']' zurückgeben (das ist das Maximum von 'lis' und der Funktion' d.get') – wim

+0

@wim - Nicht sicher, dass ich folge. Es vergleicht 'd.get ('m')', 'd.get ('i')', ... – mgilson

+0

Probieren Sie es aus und Sie werden sehen, was ich meine – wim