从列表的Python列表生成树
我有以下Python列表:从列表的Python列表生成树,python,Python,我有以下Python列表: [ ['a.b.c.d.e.rollover', 0], ['a.b.c.d.e.f.rollover', 1], ['a.b.c.d.e.g.rollover', 0] ] 假设这个列表非常大(有很多元素!) Python中是否有一种有效的方法将其转换为如下所示的多级词典? { 'a': { 'b': { 'c': { 'd': { 'e': {
[
['a.b.c.d.e.rollover', 0],
['a.b.c.d.e.f.rollover', 1],
['a.b.c.d.e.g.rollover', 0]
]
假设这个列表非常大(有很多元素!)
Python中是否有一种有效的方法将其转换为如下所示的多级词典?
{
'a': {
'b': {
'c': {
'd': {
'e': {
'rollover': 0,
'f': {
'rollover': 1
}
'g': {
'rollover': 0
}
}
}
}
}
}
}
}
}
您可以与lambda
一起使用,它返回使用相同lambda
的defaultdict
:
from collections import defaultdict
l = [
['a.b.c.d.e.rollover', 0],
['a.b.c.d.e.f.rollover', 1],
['a.b.c.d.e.g.rollover', 0]
]
dd = lambda: defaultdict(dd)
res = dd()
for k, v in l:
d = res
keys = k.split('.')
# Add all the keys except the last one, d[x] will do since
# it forces default value to be generated
for x in keys[:-1]:
d = d[x]
# Assign value to last key
d[keys[-1]] = v
print res['a']['b']['c']['d']['e']['rollover'] # 0
print res['a']['b']['c']['d']['e']['f']['rollover'] # 1
简短解释:为了在密钥不存在的情况下自动生成新的
defaultdict
,我们需要一个函数(或lambda
)来返回这样一个对象。由于defaultdict
构造函数需要一个参数,因此我们必须提供一个将参数传递给defaultdict
的函数。每次取消引用不存在的密钥时,都会调用该函数,并创建一个新的defaultdict
,如果需要,该函数将在将来再次调用相同的函数。这叫做。以下格式是字符串还是列表?只是好奇,为什么?。真的,为什么?下面的格式是Python列表。关于为什么:为什么不?这是我的申请所必需的,这就是为什么。一些家庭作业或什么的?第一个内部列表的第一个元素是什么?仔细看。你要么错过了。用于逗号或引号。我能问一下lambda部分是做什么的吗?我从未见过这样的lambda构造。lambda
只返回使用相同的lambda
生成默认值的defaultdict
。由于缺少的键默认为dict
,它允许像d['a']['b']['c']='foobar'
这样的赋值。alambda
只是简单地将函数定义为表达式。您可以使用def dd():return defaultdict(dd)
并获得相同的结果。好的,所以在这种情况下,它可以用于自动激活。@OlivierCervello:是的,没错。有一个类似这样的Python示例。