我在Python中使用 lambda 看到了递归函数的优雅解决方案。事实上,我非常有兴趣在多变量函数中应用这个概念,例如两个变量 - x和y。如何在python中完成?
函数本身并不重要,但是如果它有帮助,那么它就是描述:我有里面包含单层字典的字典,如:
dicts = [{'A': {'a': 1}, 'B': {'a': 10}}, {'A': {'b':3}}, {'B': {'c': 31}}, {'A': {'j': 4, 't': 9}}, {'B': {'y': 400, 'r': 160}}]
内部字典中的键不会重复相同的外部字典键。我希望以一种他们导致的方式合并:
result = {'A': {'a': 1, 'b': 3, 'j': 4, 't': 9}, 'B': {'a': 10, 'c': 31, 'r': 160, 'y': 400}}
使用 lambda函数解决这个问题的挑战引起了我的注意和关注。所以,如果有人可以给出提示或帮我解决这个问题,我很感激!
答案 0 :(得分:0)
Python lambda
函数只能由单个表达式组成。因此,当你想用lambda做一些复杂的事情时,你所寻找的是一个单行。
from functools import reduce # Only needed in Python3
f = lambda dicts: reduce(lambda acc, el: {**acc, **{k: {**acc.get(k, {}), **v} for k, v in el.items()}}, dicts, {})
f(dicts) # {'A': {'a': 1, 'b': 3, 'j': 4, 't': 9}, 'B': {'a': 10, 'c': 31, 'r': 160, 'y': 400}}
请注意,reduce
函数存在隐式递归。这为您提供了一个多变量lambda
的示例。