2016-08-03 12 views
3

Ich mag die folgende Struktur für einen Wörterbuch erstellen:Wie definiert man ein dreischichtiges Wörterbuch in Python?

{ id1: {id2: {id3: [] }}} 

Das ist ein Triple-Wörterbuch sein würde, die schließlich zu einer Liste verweisen.

Ich verwende den folgenden Code in Python zu initiieren:

for i in range(2160): 
    for j in range(2160): 
     for k in range(2160): 
      subnetwork.update({i: {j: {k: [] }}}) 

Dieser Code zu viel Zeit in Anspruch nimmt auszuführen. Es ist von Big-O (N^3) -Komplexität.

Gibt es Möglichkeiten, diesen Prozess zu beschleunigen? Serialisierung vielleicht die Datenstruktur und das Abrufen von der Festplatte ist schneller?

Welche Datenstrukturen können ähnliche Ergebnisse erzielen? Würde ein flaches Wörterbuch, das Drei-Element-Tupel als Schlüssel verwendet, meinem Zweck dienen?

+0

'i [0]' ?? das sollte einen Fehler werfen. –

+0

Wenn Sie kein System mit * riesigem * Speicher haben, ist Ihre Struktur zu groß. Sie erstellen 10 Milliarden Listen. Jede Liste wird mindestens ein Dutzend Bytes umfassen, also würde es mindestens 100 GB RAM erfordern. Und das zählt nicht die Diktate. – spectras

+0

wollen Sie eigentlich ein verschachteltes Wörterbuch mit 2160 ** 3 = 10 077 696 000 Listen? –

Antwort

2

Benötigen Sie wirklich 10 Milliarden Einträge (2.160 ** 3 == 10.077.696.000) in dieser Struktur? Es ist unwahrscheinlich, dass eine diskbasierte Lösung schneller ist als eine speicherbasierte Lösung, aber gleichzeitig überschreitet Ihr Programm möglicherweise die Grenzen des realen Arbeitsspeichers, was zu einem "page thrashing" führt.

Ohne etwas über Ihre beabsichtigte Anwendung zu wissen, ist es schwierig, eine geeignete Lösung vorzuschlagen. Was versuchst du zu tun?

Zum Beispiel, wenn Sie nicht nach dem Zufallsprinzip Elemente nachschlagen müssen, könnten Sie ein flaches Wörterbuch mit Drei-Element-Tupel als Schlüssel betrachten. Aber da du nicht sagst, was du versuchst zu tun, wäre wahrscheinlich höchst spekulativ.

+0

Vielen Dank für Ihre Antwort. Ja, ich suche nach alternativen Ansätzen für diese Art von Struktur. Was Sie am Ende vorgeschlagen haben, ist eine gute Idee, ich werde versuchen, es jetzt umzusetzen. Gibt es noch andere ähnliche Ansätze wie die Drei-Element-Tupel? – drizo

+1

Es gibt normalerweise viele alternative Ansätze für ein Problem, je nachdem, was Sie eigentlich tun möchten. Ein wenig mehr Informationen über das Problem, das Sie versuchen zu lösen, werden wahrscheinlich helfen. – holdenweb

+0

@drizo> An diesem Punkt denke ich, dass du darüber googeln solltest, wenn du immer noch feststeckst, stell eine andere Frage, die deinen eigentlichen Zweck angibt, von dem wir nichts wissen. – spectras