premier message, alors jouez gentil!Python: liaison/liaison des variables ensemble dans un dictionnaire
J'ai une question relativement basique sur les dictionnaires Python. Je voudrais avoir une certaine valeur dict que les mises à jour lorsqu'une autre variable est modifiée (ou au moins recalculé quand il est ensuite appelé) - par exemple:
mass = 1.0
volume = 0.5
mydict = {'mass':mass,'volume':volume}
mydict['density'] = mydict['mass']/mydict['volume']
Donc dans ce cas, mondict [ « densité »] retourne juste 2.0 . Si je change mydict ['mass'] = 2.0, la densité ne sera pas mise à jour. Fine - je peux comprendre pourquoi - la densité est définie par les valeurs quand elles ont été passées à la déclaration. Donc, je pensais que je pourrais aborder avec une expression lambda, par exemple (mes excuses pour le code horrible!):
mydict['density_calc'] = lambda x,y: x/y
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Mais encore une fois, cela ne renvoie la densité d'origine, malgré l'évolution mondict [ « masse »]. Comme une dernière tentative, j'ai essayé ceci:
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'])
Encore une fois, pas de dés. Cela semble être un problème très simple à résoudre, alors je m'excuse d'avance, mais si quelqu'un pouvait m'aider, je serais très reconnaissant!
Cheers,
Dave
Cela peut être plus proche de répondre à l'OP, mais c'est horrible. – FogleBird
Merci à tous pour les réponses utiles. J'aurais peut-être dû être plus explicite au sujet de mes exigences. J'ai besoin de "porter" le dictionnaire - il est passé à travers beaucoup de code et dupliqué etc - de nombreuses variables sont calculés coûteux à calculer. J'espérais ne pas créer une nouvelle classe (je travaille avec python parallèle, ce que j'ai trouvé peut être un PITA pour manipuler des classes parfois) mais je pense que je vais utiliser cette solution. À votre santé! – Dave
@Dave, vous devriez repenser votre parti pris contre les classes.Computationally cher est la raison pour laquelle nous utilisons des classes. Une classe devrait avoir du code qui évitera les calculs inutiles. Les attributs d'une classe sont déjà un dictionnaire. La surcharge d'un dictionnaire comme celui-ci viole les attentes des autres en cachant une clé «spéciale» différente de toutes les autres. –