J'ai rencontré un problème concernant les étendues dans une fonction lambda
. Je peux foo avec succès à stdout sortie mais je reçois une erreur lors de l'utilisation max()
y compris un lambda
- voir code simplifié ci-dessous ...'NameError: nom global n'est pas défini' sous pdb, pour le dictionnaire existant
Dans l'ensemble, je suis en train trouver la plus grande valeur pour une budget
clé imbriquée dans un nombre inconnu des clés de premier ordre.
(Pdb) foo = self.some_method() # some_method() returns a dict, printed in the next step
(Pdb) pp foo
{'1': {'count': 1,
'extra_data': {'activity-count': 1,
'budget': 0,
[...MORE KEY-VALUE PAIRS HERE...]
'version': 1},
[...LOTS MORE KEY-VALUE PAIRS HERE...]
'elements_total': defaultdict(<type 'int'>, {'result': 1, 'another_key': 2}),
'extra_year_data': defaultdict(<function <lambda> at 0x10e05bd70>, {})},
'2': {'count': 1,
'extra_data': {'activity-count': 1,
'budget': 3,
[...MORE KEY-VALUE PAIRS HERE...]
'version': 1},
[...LOTS MORE KEY-VALUE PAIRS HERE...]
'elements_total': defaultdict(<type 'int'>, {'result': 1, 'another_key': 2}),
'extra_year_data': defaultdict(<function <lambda> at 0x10e05bd70>, {})}}
(Pdb) max(foo, key=lambda x: foo[x]['extra_data']['budget'])
*** NameError: global name 'foo' is not defined
Dans l'ensemble, je suis en train d'utiliser max(foo, key=lambda x: foo[x]['extra_data']['budget'])
pour trouver la plus grande valeur pour une budget
clé imbriquée dans un nombre inconnu de premières touches de commande.
Le résultat attendu dans ce cas pourrait être 2
comme valeur pour foo['2']['extra_data']['budget'] = 3
par rapport à foo['1']['extra_data']['budget'] = 0
.
L'erreur peut-elle être liée au fait que certaines des clés (non liées) ont defaultdict
s à l'intérieur de celles-ci?
J'ai peut-être mal compris ce que vous vouliez dire par environnement, mais cela a été exécuté avec pdb dans terminal sur python 2.7.6 sur Mac 10.10.1 Yosemite. – user2761030
Non, sussed it out. Tout ce dont j'avais besoin était un peu plus de caféine. –
Pourquoi pas 'max (foo.values (), clé = lambda x: x ['extra_data'] ['budget'])'? –