从Key元组创建嵌套Python字典

时间:2014-05-01 19:43:51

标签: python dictionary

我有一个像('a', 'b', 'c')这样的可迭代键,我希望它对应于我正在构建的字典中的条目。我正在寻找一种从多个元组构建这个字典的单行方式。

输入:

keys = ('a', 'b', 'c')
value = 'bar'

输出:

{'a': {'b': {'c': 'bar'}}}

我一直在尝试使用defaultdict,但还没有真正掌握它。单线要求相当柔软,但我希望能为此留下一个非常小的空间。

1 个答案:

答案 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,我不确定我更喜欢哪个版本......


python3.x中的

1 functools.reduce也存在于python2.6 +中以缓解py3k过渡IIRC