Я столкнулся с проблемой, связанной с областями в функции lambda
. Я могу успешно вывести foo на стандартный вывод, но получаю сообщение об ошибке при использовании max()
, включая lambda
- см. упрощенный код ниже...
В общем, я пытаюсь найти наибольшее значение для вложенного ключа budget
среди неизвестного числа ключей первого порядка.
(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
В общем, я пытаюсь использовать max(foo, key=lambda x: foo[x]['extra_data']['budget'])
, чтобы найти наибольшее значение для вложенного ключа budget
в пределах неизвестного числа ключей первого порядка.
Ожидаемый результат в этом случае может быть 2
как значение для foo['2']['extra_data']['budget'] = 3
против foo['1']['extra_data']['budget'] = 0
.
Может ли ошибка быть связана с тем, что некоторые из (несвязанных) ключей содержат defaultdict
внутри них?
max(foo.values(), key=lambda x: x['extra_data']['budget'])
? - person Burhan Khalid   schedule 02.02.2016