Listen mit dynamischen Namen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

Hi zusammen.

Ich lese ein (sehr großes) logfile ein und ermittle für die abgearbeiteten Schritte jeweils die Zeit die gebraucht wurde.
Nun ist es aber so das verschidenen Prozesse parallel laufen. Diese haben zur Unterscheidung Prozess ID's.
Diese werden jedoch immer wieder neu vergeben, sodaß sich keine feste Zuordnung machen läßt.

Ich extrahiere also die ID + cmd + start Zeit + Endzeit.
Nun hätte ich gerne folgendes. Erzeuge jeweils eine Liste mit dem Namen der ID. In dieser Liste soll ID + cmd + Ausführdauer des Steps gespeichert werden.
Kommt ein neuer Schritt der die selbe ID hat, soll diese Liste erweitert (append) werden.
Hat er eine andere ID muß entweder eine neue Liste erzeugt oder an eine bestehende angehängt werden.

Ein problem: Es kann sein das pro logfile nur 3 verschiedene ID's auftauchen ... manchmal aber auch über 100 ...
D.h. ich kann nicht im "Vorraus" mal 'n paar leere Listen auf Vorrat definieren ... :wink:

Wie könnte ich also eine neue Liste mit einem "Dynamischen" Namen erzeugen ?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wieso nicht einfach ``collections.defaultdict(list)``? Als Schlüssel nimmst du die PID.
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

Hm, vielleicht verstehe ich's auch falsch, aber so hast du doch auch wieder alles zusammen in einer Struktur und mußt alle Einträge durchgehen. Dann kann ich auch eine Große Liste erzeugen und diese danach auf eine spezielle ID prüfen.
Aber wie schon gesagt, bei dieser Methode muß der gesammte Inhalt durchsucht werden.
Deshalb will ich das Ganze ja trennen ...
BlackJack

@may24: Du hast es falsch verstanden. Ja es ist eine Struktur, aber die bildet IDs auf Listen ab und man kann mit der ID auf die Liste zugreifen die nur Werte für diese ID enthält. Also genau das was Du willst.
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

Hm ... ich hab keine Ahnung wie das aussehen soll ...
Kann jemand mal ein Beispiel (code) geben ... ?
BlackJack

Code: Alles auswählen

    id2step = defaultdict(list)
    for id_, command, start_time, stop_time in parse_log_file(filename):
        id2step[id_].append((id_, command, stop_time - start_time))
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@may24: mach Dich einfach mal mit Hilfe eines Anfängertutorials Deiner Wahl mit Dictionaries vertraut. Wenn das geschafft ist, und Du noch Probleme hast, kannst Du ja dann Deinen Code hier posten, dann können wir auch gleich viel konkreter helfen.
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

Ah, hat geklappt :)
Läuft schneller als erwartet

Vielen Dank :)
Antworten