2012-09-25 3 views

Répondre

13

Vous ne pouvez pas accéder à _dicttandis que le définissant. Python évalue d'abord le littéral dict {...} avant de l'affecter à _dict. En d'autres termes, lors de l'évaluation de l'instruction littérale dict {...}, _dict n'est pas encore défini et n'est donc pas accessible.

Pour ce faire, à la place:

_dict = {"foo" : 1234} 
_dict["bar"] = _dict["foo"] + 1 
+1

+1 pour expliquer pourquoi la version OP ne fonctionne pas :) –

+0

Grande réponse, exactement ce que je voulais, merci pour la réponse très rapide :) – xceph

9

Vous pouvez attribuer ensuite de la même var:

foo = 1234 
_dict = { 
    "foo" : foo, 
    "bar" : foo + 1, 
} 

Ou avec deux déclarations (toujours le même) dict:

_dict = { "foo": 1234 } 
_dict["bar"] = _dict["foo"] + 1 

Si vous pouvez elab orate sur ce que vous essayez d'atteindre, peut-être y at-il une solution plus élégante à trouver. Souvent, quand on a besoin de définir la valeur dict sur la base d'un autre, c'est parce que les valeurs sont définies dynamiquement en utilisant une opération paramétrée. Dans ces cas, il est parfois possible d'utiliser la compréhension de la liste/l'expression du générateur. Par exemple.

>>> dict((v, 1234+i) for i, v in enumerate(("foo", "bar"))) 
{'foo': 1234, 'bar': 1235} 
+1

mais il est non relié compréhension/expression du générateur de liste. – jamylak

+0

@jamylak bon point. Post édité. –

Questions connexes