2016-10-31 2 views
0

Ich verstehe, dass Wörterbuch nicht geordnet ist. Ich weiß das.In welcher Reihenfolge zeigt Python den Schlüssel des Wörterbuchs

Dies ist jedoch ein Code zum Zählen der Worthäufigkeit.

def wordCount(kalimat): 
    counter = {} 
    for kata in kalimat.split(" "): 
     if kata in counter: 
      counter[kata] += 1 
     else: 
      counter[kata] = 1 
    for I in sorted(counter): 
     if counter[I] == 1: 
      print("{:<10} appears 1 time.".format(I,counter[I])) 
     else: 
      print("{:<10} appears {:<3} times.".format(I,counter[I])) 

Ich rief die WordCount mit der folgenden Zeichenfolge.

kann ein Wort einmal erscheinen, aber zweimal zweimal erscheinen, da dies ein nicht wieder mit diesem Tier erscheint

Dies ist das Ergebnis.

Run # 1

again  appears 1 time. 
not  appears 1 time. 
one  appears 1 time. 
may  appears 2 times. 
word  appears 1 time. 
appear  appears 3 times. 
since  appears 1 time. 
twice  appears 2 times. 
but  appears 1 time. 
with  appears 1 time. 
will  appears 1 time. 
A   appears 1 time. 
animal  appears 1 time. 
this  appears 2 times. 
once  appears 1 time. 

Run # 2

once  appears 1 time. 
word  appears 1 time. 
will  appears 1 time. 
animal  appears 1 time. 
appear  appears 3 times. 
again  appears 1 time. 
A   appears 1 time. 
not  appears 1 time. 
one  appears 1 time. 
but  appears 1 time. 
twice  appears 2 times. 
may  appears 2 times. 
with  appears 1 time. 
since  appears 1 time. 
this  appears 2 times. 

Ich verstehe, dass nicht bestellt, aber selbst wenn sie nicht bestellt werden, warum die Reihenfolge anders ist? Meine Phantasie ist der Grund, dass es nicht alphabetisch geordnet ist, weil die Reihenfolge auf der Zeit basiert sie registriert sind (dh.queue)

Ich kann mir nicht vorstellen, dass sie random.shuffle() aufrufen, wenn ich es anzeigen möchte.

+1

Der nächste Mal versuchen, Ihre Frage Titel in eine Google-Suche einfügen, bevor es zu veröffentlichen. Sie können oft nützliche Ergebnisse wie folgt erhalten. – TigerhawkT3

Antwort

0

Pythons Hash-Funktion wird jedes Mal mit einem Zufallsgenerator versehen, um DDoS-Angriffe zu verhindern, da ein böswilliger Gegner speziell gestaltete Eingaben erstellen könnte, die in O(n) durch Erzeugen einer großen Hash-Kollision Wörterbuchoperationen verursachen würden .

Sie können mehr lesen über sie here

-1

Viele Wörterbuch (auch bekannt als Karte) Implementierungen auf der hash table Datenstruktur für sehr schnelle Wiederherstellung basieren. Dies bedeutet, dass Schlüssel in einen zufälligen Index gehackt werden und Werte in diesen Slots platziert werden. Wenn Sie über ein Wörterbuch iterieren, ist es am einfachsten, das Array in der richtigen Reihenfolge zu durchlaufen, was bedeutet, dass die Reihenfolge der Hash-Reihenfolge der Schlüssel entspricht.

Was, warum der Auftrag von Laufe abweichen zu laufen, gibt es zwei gute Gründe:

  1. Die Kapazität der Hash-Tabelle aufgrund der unterschiedlichen Vorgaben abweichen, unterschiedlicher Geschichte, usw. Aus diesem Weil , die Hash-Reihenfolge wird unterschiedlich sein, wenn die Größe der Tabelle unterschiedlich ist.

  2. Die Hash-Reihenfolge kann willkürlich randomisiert werden, um Angriffe zu verhindern. Wenn die Hash-Funktion fest und bekannt ist, kann ein Angreifer versuchen, viele Elemente in denselben Bucket zu stellen, wodurch die Hash-Tabelle auf die Geschwindigkeit einer verknüpften Liste verlangsamt wird. Siehe auch: Why is dictionary ordering non-deterministic?

Verwandte Themen