2016-05-02 7 views
-2

Hallo Ich brauche diese Linie zu verstehenFunktion und Wörterbuch-Format verstehen

freq[x] = freq.get(x,0) + 1 

in folgenden Code und wie es funktioniert. Ich weiß, Funktion gibt Wörterbuch zurück, aber ich muss wissen, wie diese Linie genau funktioniert.

def get_frequency_dict(sequence): 
    """ 
    Returns a dictionary where the keys are elements of the sequence 
    and the values are integer counts, for the number of times that 
    an element is repeated in the sequence. 

    sequence: string or list 
    return: dictionary 
    """ 
    # freqs: dictionary (element_type -> int) 
    freq = {} 
    for x in sequence: 
     freq[x] = freq.get(x,0) + 1  
    return freq 
+1

Wenn Sie wissen, dass es ein Wörterbuch ist, haben Sie die [entsprechende Dokumentation] finden (https://docs.python.org/2/library/stdtypes.html#dict.get) noch? –

+0

ja ich habe versucht, diese Funktion ist in einer der helfenden Notizen. Meine Verwirrung ist eigentlich die Logik, warum 1 hinzugefügt wird. Ich meine, wenn "erhalten" wird 1 bereits geben, wenn Buchstabe in der Reihenfolge vorhanden ist, dann +1 sollte es machen 2. – alisagi

+0

Ja, also, wenn Sie bereits den Brief vor gezählt haben, und Sie einen zweiten solchen Buchstaben gefunden, warum sollte es * nicht * Speicher 2 dann? –

Antwort

1

Die Linie verwendet den dict.get() method, der entweder den Wert für den gegebenen Schlüssel zurückgibt, oder einen Standardwert.

So ist die Linie

freq[x] = freq.get(x,0) + 1  

speichert entweder 1 wenn x nicht im Wörterbuch gefunden wurde (so zurück freq.get(x, 0) 0) oder erhöht er einen bereits vorhandenen Wert. Dies bedeutet, dass alle Werte in sequence gezählt werden. Es werden nur Schlüssel für jeden Wert erstellt, wenn dieser Wert zum ersten Mal gefunden wird. Dadurch müssen Sie nicht alle möglichen Werte als Schlüssel mit dem Wert 0 vorbelegen.

from collections import Counter 

def get_frequency_dict(sequence): 
    """ 
    Returns a dictionary where the keys are elements of the sequence 
    and the values are integer counts, for the number of times that 
    an element is repeated in the sequence. 

    sequence: string or list 
    return: dictionary 
    """ 
    return Counter(sequence) 

Seit Counter ist eine Unterklasse von dict, die in der Dokumentation angegeben Invarianten noch zufrieden sein würde:

Die ganze Funktion trivialerweise durch eine collections.Counter() instance ersetzt werden könnte.

0

Wie in den documentation refered, gibt die Methode get des Wörterbücher den zu einem key (ersten Parameter) zugeordnete Wert, wenn key im dict definiert ist. Andernfalls wird der Wert default (zweiter Parameter) zurückgegeben.

get(dict, key, default=None): 
    if key in dict: 
     return dict[key] 
    return default 

In Ihrem Fall zählt die Funktion die Anzahl der Vorkommen jedes Elements in der Sequenz.

Verwandte Themen