Python Variable als Dictionary Namen?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
variable = "Haus"
exec(variable + " = {}")
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
J0T4T4  20.12.2020, 21:20

Cool! Ich wusste überhaupt nicht, dass Python auch eval hat.

1
MrAmazing2  20.12.2020, 21:24
@J0T4T4

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.

1
Gamco 
Fragesteller
 20.12.2020, 21:20

Vielen Dank es funktioniert

1
belgisch  21.12.2020, 00:20

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:

variable = 'pimmel'
locals()[variable] = {}

pimmel['name'] = 'Junior'

print(pimmel)
# {'name':'Junior'}

Anstatt locals() geht auch globals() und einige weitere, je nach dem Kontext, in dem man sich gerade befindet.

1
MrAmazing2  21.12.2020, 01:26
@belgisch

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.

0
MrAmazing2  21.12.2020, 01:31
@belgisch

Aber ja, ist definitiv Ordentlicher, da hast du recht. ^^

Trotzdem ist eval meiner Meinung nach nicht evil, sofern man damit umzugehen weiß.

0
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.

Von Experte MrAmazing2 bestätigt
wert = "Haus"
globals()[wert] = {}
#oder
locals()[wert] = {}

Ist aber immer eine Kosten-Nutzen-Frage

belgisch  21.12.2020, 00:22

Na, toll ... hätte ich deine Antwort vorher gesehen, hätte ich mir meinen Kommentar unter der Antwort von MrAmazing2 sparen können.

1

geht nicht, und das hat auch keinen sinn

MrAmazing2  20.12.2020, 21:22

Geht schon, und hat auch Sinn. Trotzdem sollte man es vermeiden, erstrecht wenn User-Input im Spiel ist.

1