Dict. automatisch erstellen

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
Benutzeravatar
Damaskus
Administrator
Beiträge: 911
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Donnerstag 20. September 2007, 17:04

Hallo Community,
wie kann ich ein Dictionary "automatisch" erzeugen?

Ich brauche eins ähnlich wie unten, nur mit insgesamt ca. 270 solchen einträgen.
Gibts eine möglichkeit so etwas in einer Schleife zu erzeugen ähnlich wie
bei Listen und den Eintrag dann z.B. mit append() einzufügen?

Code: Alles auswählen

        self.dictionary = {"kmd_1": [None, str, "KMD", "EMPF_0"],
                           "kmd_2": [None, str, "KMD", "EMPF_1"],
                           "kmd_3": [None, str, "KMD", "EMPF_2"],
                           "kmd_4": [None, str, "KMD", "EMPF_1"],
                           "kmd_5": [None, str, "KMD", "EMPF_2"],
                           "kmd_6": [None, str, "KMD", "EMPF_1"],
                           "kmd_7": [None, str, "KMD", "EMPF_2"],
                           "kmd_8": [None, str, "KMD", "EMPF_1"],
                           "kmd_9": [None, str, "KMD", "EMPF_2"],
                           "kmd_10": [None, str, "KMD", "EMPF_1"],
                           "99999999_1": [None, str, "99999999", "EMPF_0"],
                           "99999999_2": [None, str, "99999999", "EMPF_1"],
                           "99999999_3": [None, str, "99999999", "EMPF_2"],
                           "99999999_4": [None, str, "99999999", "EMPF_3"],
                           "99999999_5": [None, str, "99999999", "EMPF_0"],
                           "99999999_6": [None, str, "99999999", "EMPF_1"],
                           "99999999_7": [None, str, "99999999", "EMPF_2"],
                           "99999999_8": [None, str, "99999999", "EMPF_3"],
                           "99999999_9": [None, str, "99999999", "EMPF_0"],
                           "99999999_10": [None, str, "99999999", "EMPF_1"],
                           "88888888_1": [None, str, "88888888", "EMPF_0"],
                           "88888888_2": [None, str, "88888888", "EMPF_0"],
                           "88888888_3": [None, str, "88888888", "EMPF_0"],
                           "88888888_4": [None, str, "88888888", "EMPF_0"],
                           "88888888_5": [None, str, "88888888", "EMPF_0"],
                           "88888888_6": [None, str, "88888888", "EMPF_0"],
                           "88888888_7": [None, str, "88888888", "EMPF_0"],
                           "88888888_8": [None, str, "88888888", "EMPF_0"],
                           "88888888_9": [None, str, "88888888", "EMPF_0"],
                           "88888888_10": [None, str, "88888888", "EMPF_0"],
                           }
Gruß
Damaskus
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Donnerstag 20. September 2007, 17:28

Ja klar, nur das du das halt mit dem key machst.
Bsp, ungetestet:

Code: Alles auswählen

dictionary = {}
for keypart1 in ("kmd", "99999", "88888", "xyz"):
    for keyno in xrange(1, 11):
         # wahlweise auch mit "%s"...
         dictionary[keypart1 + "_" + keyno] = [None, str, keypart1, "?"]

        
Welcher Regel die "EMPF"s folgen, seh ich grad nicht.
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Donnerstag 20. September 2007, 17:30

Hi Damaskus,

ich glaube Du meinst sowas wie das hier:

Code: Alles auswählen

Keys = range(3)
Values = ["Hallo", "Welt", "!"]

print dict(zip(Keys, Values))
{0: 'Hallo', 1: 'Welt', 2: '1'}
Gruß,
Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Damaskus
Administrator
Beiträge: 911
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Donnerstag 20. September 2007, 18:02

schlangenbeschwörer hat geschrieben: Welcher Regel die "EMPF"s folgen, seh ich grad nicht.

Die folgen gar keiner Regel sondern sind vorgegeben.

Das ganze wird aus einer INI eingelesen.
Es gibt darin Sektionen die aus 8 Ziffern bestehen (z.B. 99999999)
Und in jeder Sektion gibts 30 Variablen mit EMPF_1 bis EMPF_30, die eingelesen werden und dann als 99999999_1, ..._2, ..._3, ... (als Key) und "text" als Value in dem Dict. stehen sollen.

Bisher hab ich das ganz einfach gelöst mit obigen Muster, da das Dict. am Anfang immer mit None als Value starten MUSS.

Jetzt überleg ich halt wie ich den Code um ca. 270 Zeilen kürzen kann.

Mfg
Damaskus
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Donnerstag 20. September 2007, 18:34

Damaskus hat geschrieben:
schlangenbeschwörer hat geschrieben: Welcher Regel die "EMPF"s folgen, seh ich grad nicht.

Die folgen gar keiner Regel sondern sind vorgegeben.

Das ganze wird aus einer INI eingelesen.
Es gibt darin Sektionen die aus 8 Ziffern bestehen (z.B. 99999999)
Und in jeder Sektion gibts 30 Variablen mit EMPF_1 bis EMPF_30, die eingelesen werden und dann als 99999999_1, ..._2, ..._3, ... (als Key) und "text" als Value in dem Dict. stehen sollen.
...
Jetzt überleg ich halt wie ich den Code um ca. 270 Zeilen kürzen kann.
Hi Damaskus,

ich sehe Dein Problem noch nicht. Wenn Dir Schlüssel und Werte vorher bekannt sind, nimmst Du meinen Lösungsansatz. Wenn Du das Dictionary dynamisch befüllen willst, nimmst Du den vom Schlangenbeschwörer.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Donnerstag 20. September 2007, 20:49

Du kannst natürlich auch in einer Schleife einfach jede Zeile einlesen filtern/formatieren und dann im dict speichern.

Code: Alles auswählen

#file_ = ...
for line in file_ : #oder file_.readline() oder was auch immer du hast
    key = line[xy]
    args = [xy+"?" for xy in file_]
    d[key] = args
Benutzeravatar
Damaskus
Administrator
Beiträge: 911
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Donnerstag 20. September 2007, 22:08

Michael Schneider hat geschrieben:
Damaskus hat geschrieben:
schlangenbeschwörer hat geschrieben: Welcher Regel die "EMPF"s folgen, seh ich grad nicht.

Die folgen gar keiner Regel sondern sind vorgegeben.

Das ganze wird aus einer INI eingelesen.
Es gibt darin Sektionen die aus 8 Ziffern bestehen (z.B. 99999999)
Und in jeder Sektion gibts 30 Variablen mit EMPF_1 bis EMPF_30, die eingelesen werden und dann als 99999999_1, ..._2, ..._3, ... (als Key) und "text" als Value in dem Dict. stehen sollen.
...
Jetzt überleg ich halt wie ich den Code um ca. 270 Zeilen kürzen kann.
Hi Damaskus,

ich sehe Dein Problem noch nicht. Wenn Dir Schlüssel und Werte vorher bekannt sind, nimmst Du meinen Lösungsansatz. Wenn Du das Dictionary dynamisch befüllen willst, nimmst Du den vom Schlangenbeschwörer.

Grüße,
Michael
Problem ist mit den oberen Lösungsansätzen schon erledigt.
Ich wollt nur noch erklären wie sich die EMPFs zusammensetzten.

Gruß
Damaksus
Antworten