ersten Beitrag, so spielen Sie nett!Python: Verknüpfen/Binden von Variablen zusammen in einem Wörterbuch
Ich habe eine ziemlich grundlegende Frage über Python-Wörterbücher. Ich möchte einige dict Wert haben, die Updates, wenn eine andere Variable geändert wird (oder zumindest neu berechnet, wenn es nächste genannt wird) - zB:
mass = 1.0
volume = 0.5
mydict = {'mass':mass,'volume':volume}
mydict['density'] = mydict['mass']/mydict['volume']
So in diesem Fall myDict [ ‚Dichte‘] liefert nur 2,0 . Wenn ich mydict ['mass'] = 2.0 ändere, wird die Dichte nicht aktualisiert. Gut - ich kann verstehen, warum - die Dichte wird durch die Werte definiert, wenn sie an die Deklaration übergeben wurden. Also dachte ich, vielleicht könnte ich dies mit einem Lambda-Ausdruck nähern, zB (Entschuldigung für den schrecklichen Code!):
mydict['density_calc'] = lambda x,y: x/y
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Aber noch einmal, das gibt nur die ursprüngliche Dichte, trotz myDict Wechsel [ ‚Masse‘]. Als letzten Versuch habe ich folgendes versucht:
def density(mass,volume): return mass/volume
mydict['density_calc'] = lambda x,y: density(x,y)
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Nochmal keine Würfel. Das scheint ein wirklich einfaches Problem zu sein, also entschuldige mich im Voraus, aber wenn mir jemand helfen könnte, wäre ich sehr dankbar!
Cheers,
Dave
Dies kann am nächsten an der Beantwortung der OP, aber es ist schrecklich. – FogleBird
Vielen Dank für die hilfreichen Antworten. Ich hätte vielleicht deutlicher über meine Anforderungen sprechen sollen. Ich muss das Wörterbuch "herumtragen" - es wird durch viel Code geleitet und dupliziert usw. - viele der Variablen sind rechenintensiv zu berechnen. Ich hatte gehofft, keine neue Klasse zu erstellen (ich arbeite mit parallelem Python, das, wie ich finde, manchmal ein PITA für den Umgang mit Klassen sein kann), aber ich denke, ich werde diese Lösung verwenden. Prost! – Dave
@Dave, sollten Sie Ihre Voreingenommenheit gegen Klassen überdenken.Rechnerisch teuer ist der Grund, warum wir Klassen verwenden. Es wird erwartet, dass eine Klasse Code hat, der unnötige Berechnungen vermeidet. Die Attribute einer Klasse sind bereits ein Wörterbuch. Ein solches Wörterbuch zu überladen, verletzt die Erwartungen anderer, indem es einen "speziellen" Schlüssel versteckt, der sich von allen anderen unterscheidet. –