# Python-Dictionary mit Variablen, die verschiedene Werte annehmen können möglich?



## Samsonn (7. Januar 2023)

Hallo, zurzeit schreibe ich an einem Python Dictionary rum, welches mir einfach nicht gelingen will:

D = dict()

with open("text.txt", "r", encoding="utf-8") as datei: 
    for zeile in datei:
            zeile = zeile.rstrip()
            X,Y,Z = zeile.split(",")
            D[(X,Y)]= Z

Die Text-Datei ist nach folgendem Schema aufgebaut: (Sie hat zwar andere Werte und ist paar Millionen Zeichen lang, aber die Formatierung ist wie im Beispiel in diesen dreier Ketten mit Komma als Trennzeichen)

1,2,3
4,5,6
7,8,9

Die Idee war, dass ich die paar Millionen Werte in der Textdatei der Reihe nach auslese und dabei immer den ersten Wert der Zeile dem X, den zweiten Wert dem Y und den dritten Wert dem Z zuordne. Leider spuckt mir PYthon aber immer nur die letzte Zeile der Datei auf diese Art und Weise aus (also in unsere Fall jetzt für X nur "7" statt "1", "4" und "7". Was muss ich an der Methode ändern?

Danke im Vorraus ^^


----------



## Samsonn (Sonntag um 15:52)

Für alle die auch dieses Problem haben: Ich habe es folgendermaßen gelöst, indem ich eine Liste der Tupel (X,Y) und eine Liste der Z Werte eingelesen habe. Die Tupel werden der Schlüssel und die Z-Werte werden die Werte. Da man ja nicht direkt Listen in ein Dictionary einlesen kann, habe ich das Problem mit der zip-Methode gelöst. Hier ein Artikel der die Dictionarys und die zip-Methode ausführlich erklärt: Python3-Tutorial: Dictionaries

Viel Glück!


----------



## ikosaeder (Mittwoch um 13:07)

Schön das du dein Problem selbst gelöst hast. Vielleicht postest du trotzdem den Code für deine Lösung, damit andere davon profitieren?
Und auch wenn du eine Lösung hast, verstehe ich dein Problem noch nicht. Ich hätte vermutlich eher ein Dict erstellt ala D = {'x': val1, 'y' : val2, 'z' :val3} und dann eine Liste mit einem solchen Dictionary je Zeile angelegt. Aber vielleicht verstehe ich das auch nur falsch.


----------



## Samsonn (Gestern um 13:49)

Stimmt, die Lösung lautet:

with open("Textdatei.txt", "r", encoding="utf-8") as datei:
      for zeile in datei:
        zeile = zeile.rstrip()
        Teil1,Teil2,Teil3 = zeile.split(",")
        ListeXY.append((float(Teil1),float(Teil2)))
        ListeZ.append(float(Teil3))
D = dict(zip(ListeXY, ListeZ))


----------

