如何创建一个多级字典

时间:2014-02-26 16:54:56

标签: python dictionary

它必须是一件简单的事情,但无法理解它。我的部分脚本执行此操作:

myDict = {}
for dev in self.dmd.Devices():
    device = dev.id
    collector = dev.getPerformanceServerName()
    instances = [ inst.id for inst in dev.instances() ]

从那里,我想创建一个这样的字典:

{
    "EC2-test-eip-alloc": {
        "mon511.backbc.local": [
            "i-1828ca57",
            "i-372d3978"
        ]
    }
    ....
    ....
}

其中 EC2-test-eip-alloc => device mon511.backbc.local => collector [“i-1828ca57”,“i-372d3978”] => instances。我尝试过:

inDict = reduce(lambda d, k: d.setdefault(k, {}), device, myDict)
inDict.setdefault(collector, instances)

但得到一个非常奇怪的结果,其中device的每个字符都被视为键,如下所示: {"E":{"C":{"2":{"-":{...}}}}}。知道我怎么能把这个东西弄好吗?欢呼声!!

1 个答案:

答案 0 :(得分:1)

重申我上面的评论,请更改

inDict = reduce(lambda d, k: d.setdefault(k, {}), device, myDict)

inDict = reduce(lambda d, k: d.setdefault(k, {}), (device,), myDict)

以便减少迭代('device', )(产生'device', StopIteration)而不是'device'(产生'd', 'e', 'v', 'i', 'c', 'e', StopIteration)。