Seite 1 von 1

verzweigtes Dictionary in for Schleife?

Verfasst: Mittwoch 19. Dezember 2018, 16:13
von ilonar
Halloo,

wahrscheinlich ist die Antwort ganz einfach, aber ich komm irgendwie nicht richtig drauf.

Ich habe folgende Dictionary Struktur:

Code: Alles auswählen

Materials = {
	"Rubber" : { "EModul" : "100", "Poissonzahl" : "0.49", "YieldStress" : "100000.0"},
	"Steel" : {  "EModul" : "215000.0", "Poissonzahl" : "0.28", "YieldStress" : "355.0"}
	}
und möchte nun nicht für jedes Material eine eigene Schleife basteln, sondern, dass mein Python Skript jedes Dictionary in Materials in einer for Schleife öffnet. Mein Ansatz sieht bisher so aus:

Code: Alles auswählen

for value in Materials.values():
	for line in lines:
		if "ELASTIC PLACEHOLDER" in line:
			line = Materials[str(value)]["EModul"] + ", " + Materials[str(value)]["Poissonzahl"] +"\n"			
also er soll für jedes Material EModul, Poissonzahl in einer Zeile ersetzen. Bisher spuckt er mir nur ständig Fehlermeldungen aus..

Vielleicht kann mir ja jemand helfen :)

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Mittwoch 19. Dezember 2018, 16:20
von __deets__
Wenn du nur ueber die Werte eines Worterbuches iterierst, dann ist value doch ein WERT. Und kein Schluessel, mit dem du dann wiederum auf dein Woerterbuch zugreifen kannst. Was du aber ja eh nicht musst, denn value ist doch schon der Wert. Da musst du doch dann ueberhaupt nicht mehr auf Materials selbst zugreifen.

Und woher kommt denn "lines"? Sehe ich nirgendwo definiert.

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Mittwoch 19. Dezember 2018, 16:25
von __blackjack__
@ilonar: Was für Fehlermeldungen denn?

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Mittwoch 19. Dezember 2018, 18:39
von ThomasL
schau dir das mal an...

Code: Alles auswählen

materials = {
	"Rubber" : { "EModul" : "100", "Poissonzahl" : "0.49", "YieldStress" : "100000.0"},
	"Steel" : {  "EModul" : "215000.0", "Poissonzahl" : "0.28", "YieldStress" : "355.0"}
	}

for key1, value1 in materials.items():
    for key2, value2 in value1.items():
        print(key2, value2)

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Mittwoch 19. Dezember 2018, 19:12
von Sirius3
Hast Du Dir schonmal angeschaut was `str(values)` ist? Jedenfalls kein Schlüssel des Wörterbuchs Materials.
Das könnte besser so aussehen:

Code: Alles auswählen

for value in Materials.values():
    for line in lines:
        if "ELASTIC PLACEHOLDER" in line:
            line = "{}, {}\n".format(value["EModul"], value["Poissonzahl"])

Jetzt muß man nur noch was mit `line` machen, denn so wird das ja durch den nächsten for-Durchgang überschrieben.
Einrücken tut man übrigens mit 4 Leerzeichen pro Ebene, nicht Tabs.

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Donnerstag 20. Dezember 2018, 13:24
von ilonar
Sirius3 hat geschrieben: Mittwoch 19. Dezember 2018, 19:12 Hast Du Dir schonmal angeschaut was `str(values)` ist? Jedenfalls kein Schlüssel des Wörterbuchs Materials.
Das könnte besser so aussehen:

Code: Alles auswählen

for value in Materials.values():
    for line in lines:
        if "ELASTIC PLACEHOLDER" in line:
            line = "{}, {}\n".format(value["EModul"], value["Poissonzahl"])

Jetzt muß man nur noch was mit `line` machen, denn so wird das ja durch den nächsten for-Durchgang überschrieben.
Einrücken tut man übrigens mit 4 Leerzeichen pro Ebene, nicht Tabs.
DANKE! Das funktioniert!
Gibts jetzt noch eine Möglichkeit da eine if schleife mit einzubauen?
Also sowas in der Art:

Code: Alles auswählen

for value in Materials.values():
    for line in lines:
    	if value==Rubber:
            if "ELASTIC PLACEHOLDER" in line:
                line = "{}, {}\n".format(value["EModul"], value["Poissonzahl"])
          
nur value==Rubber funktioniert nicht, da in value nicht die Namen der Materialien gespeichert sind...
Ich steh mit dieser Schleife total auf dem Schlauch, sorry!
Wäre lieb wenn noch jemand kurz helfen könnte

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Donnerstag 20. Dezember 2018, 13:31
von __deets__
Wenn du nicht nur die WERTE, sondern auch die SCHLUESSEL haben willst, dann musst du items verwenden, und in der for-Schleife entsprechend anpassen.

Code: Alles auswählen

for key, value in dictionary.items():
Und if-schleifen gibt es nicht... http://if-schleife.de/

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Donnerstag 20. Dezember 2018, 13:37
von __blackjack__
@ilonar: Wenn der Schlüssel gleich 'Rubber' sein soll, dann macht die Schleife über `Materials` doch überhaupt keinen Sinn, denn das trifft dann nur auf *ein einziges* Element zu. Da könnte man dann viel effizienter das hier für schreiben:

Code: Alles auswählen

    rubber = materials['Rubber']
    for line in lines:
        if 'ELASTIC PLACEHOLDER' in line:
            line = '{0[EModul]}, {0[Poissonzahl]}\n'.format(rubber)
            # ...

Re: verzweigtes Dictionary in for Schleife?

Verfasst: Donnerstag 20. Dezember 2018, 13:40
von ilonar
Jap!

Ich habs, danke :)