我有一个像('a', 'b', 'c')
这样的可迭代键,我希望它对应于我正在构建的字典中的条目。我正在寻找一种从多个元组构建这个字典的单行方式。
输入:
keys = ('a', 'b', 'c')
value = 'bar'
输出:
{'a': {'b': {'c': 'bar'}}}
我一直在尝试使用defaultdict,但还没有真正掌握它。单线要求相当柔软,但我希望能为此留下一个非常小的空间。
答案 0 :(得分:4)
您可以在此处使用reduce
1 :
reduce(lambda x, y: {y: x}, keys[::-1], value)
或者,使用reversed
返回的迭代器:
reduce(lambda x, y: {y: x}, reversed(keys), value)
很多人可能不太喜欢这个。除非你真的在python中进行函数式编程,否则这有点不透明。一个更简单的解决方案只需要3行:
>>> keys = ('a', 'b', 'c')
>>> value = 'bar'
>>> for c in reversed(keys):
... value = {c: value}
...
>>> value
{'a': {'b': {'c': 'bar'}}}
并且不依赖于任何略显模糊的内置函数。
FWIW,我不确定我更喜欢哪个版本......
1 functools.reduce
也存在于python2.6 +中以缓解py3k过渡IIRC