Python: rekursiv Wörterbuch aus Pfaden erstellen

8

Ich habe mehrere hunderttausend Endpunkt-URLs, für die ich Statistiken generieren möchte. Zum Beispiel habe ich:

%Vor%

Ich möchte ein Wörterbuch erstellen, das so aussieht

%Vor%

Irgendwelche cleveren Möglichkeiten, dies zu tun?

BEARBEITEN

Ich sollte erwähnen, dass die Wege nicht immer 3 Teile sind. Es könnte geben /a/b/c/d/e/f/g/h ... etc, usw.

    
sberry 06.01.2010, 23:08
quelle

4 Antworten

6

Wenn die Pfade in Ihrem Beispiel alle so aussehen, würde dies funktionieren:

%Vor%

Dies verwendet Wörterbuchmethoden wie setdefault() und get() um zu vermeiden, dass viele if-Anweisungen geschrieben werden müssen.

Beachten Sie, dass dies nicht funktioniert, wenn ein Pfad mit Unterverzeichnissen auch eigenständig angezeigt werden kann. Dann ist nicht klar, ob der entsprechende Teil von counts eine Nummer oder ein anderes Wörterbuch enthalten soll. In diesem Fall wäre es wahrscheinlich am besten, sowohl eine Zählung als auch ein Diktat für jeden Knoten zu speichern, indem ein Tupel oder eine benutzerdefinierte Klasse verwendet wird.

Der grundlegende Algorithmus bleibt gleich:

%Vor%

Mit einigen schönen Drucken erhalten Sie:

%Vor%     
sth 06.01.2010, 23:18
quelle
3

BEARBEITEN:

Ich habe meinen Code so geändert, dass er zu Ihrem letzten Kommentar passt (oben keine komplexe Datenstruktur).

%Vor%

Es wird eine Liste von [frequency, dictionary] für jeden Gegenstand gespeichert.

Testfall

%Vor%     
Smashery 06.01.2010 23:32
quelle
1

Hier ist mein Versuch:

%Vor%

Ich habe etwas von der Logik in die Klasse Result eingepackt, um zu versuchen, den Algorithmus ein wenig klarer zu machen.

    
Michael Williamson 06.01.2010 23:51
quelle
1

Altes Ergebnis, aber immer noch in der Nähe der Spitze in Google, also werde ich aktualisieren: Sie könnten dafür dpath-python verwenden.

%Vor%

... und das ist es. Ich verstehe nicht die Mathematik, die Sie verwenden, um diese Werte am Terminus (1, 2, usw.) vorberechnen, aber Sie könnten es vorberechnen und ein Wörterbuch der Pfad-zu-Wert anstelle einer Liste verwenden

%Vor%

So etwas würde funktionieren.

    
Andrew Kesterson 12.05.2013 13:50
quelle

Tags und Links