Python Variable als Dictionary Namen?
Ich möchte dass ein Dictionary nach einer Variablen benannt wird.
Das Problem ist nur wenn ich das so schreib
wert = "Haus"
wert = {}
Dann wird das Dictionary wert und nicht Haus genannt.
Wie kann ich das ändern?
Danke
4 Antworten
variable = "Haus"
exec(variable + " = {}")
Bin kein Python-Programmierer, konnte ich also schlecht wissen.
Ist vermutlich sicherer als eval, aber es ist eine gute Antwort. Warum unter meinem Niveau? Es kommt genau aufs gleiche hinaus. Solange der Variablenname nicht aus externen Daten / Userinput gezogen wird ist daran absolut nichts falsch.
Aber ja, ist definitiv Ordentlicher, da hast du recht. ^^
Trotzdem ist eval meiner Meinung nach nicht evil, sofern man damit umzugehen weiß.
Ich auch nicht, aber da Python ähnlich wie JavaScipt interpretiert wird anstatt compiled bin ich einfach mal davon ausgegangen ^^
Kleiner Unterschied: In Python kann eval() nur benutzt werden, um Expressions zu evaluieren. Um Zuweisungen zu machen (und Variablen zu erstellen) muss man exec() benutzen.
Ich möchte dass ein Dictionary nach einer Variablen benannt wird.
Ich glaube nicht, dass du das möchtest. Wahrscheinlich möchtest du ein Dictionary von Dictionaries, das ist natürlich kein Problem:
name = "quaxi"
mein_dict = {name : {"wetter" : "sonnig"}}
print(mein_dict[name])
Du kannst zu Klassen bzw. Objekten auch problemlos zur Laufzeit benannte Attribute hinzufügen - die haben nämlich dafür ein eingebautes Dictionary. Das ist aber auch oft keine so gute Idee.
Wenn du wirklich an der lokalen Symboltabelle herumpfuschen willst, dann gibt es dafür locals(). Aber wie gesagt, das willst du nicht, auch im Hinblick auf deine bisherigen Python-Fragen die nahelegen dass du ein ziemlicher Anfänger bist.
wert = "Haus"
globals()[wert] = {}
#oder
locals()[wert] = {}
Ist aber immer eine Kosten-Nutzen-Frage
Na, toll ... hätte ich deine Antwort vorher gesehen, hätte ich mir meinen Kommentar unter der Antwort von MrAmazing2 sparen können.
geht nicht, und das hat auch keinen sinn
Geht schon, und hat auch Sinn. Trotzdem sollte man es vermeiden, erstrecht wenn User-Input im Spiel ist.
Aua, tut dir das nicht weh? Deine Antworten sind eigentlich immer sehr gut, aber exec() und eval() sind doch unter deinem Niveau!
Wenn, dann lieber gleich ordentlich so:
Anstatt locals() geht auch globals() und einige weitere, je nach dem Kontext, in dem man sich gerade befindet.