如何创建多级词典

2024-05-13 19:54:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这件事一定很简单,但我想不通。我的部分脚本是这样做的:

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=>;devicemon511。backbc.本地=>;collector[“i-1828ca57”,“i-372d3978”]=>;instances。我试过:

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

但是得到了一个非常奇怪的结果,device的每个字符都被当作键,如下所示: {"E":{"C":{"2":{"-":{...}}}}}。你知道我怎样才能把这件事做好吗?干杯!!你知道吗


Tags: instancesindevtestgtidfordevice
1条回答
网友
1楼 · 发布于 2024-05-13 19:54:30

要重申我的上述评论,请更改

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

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

因此reduce通过('device', )(产生'device', StopIteration)而不是“device”(产生'd', 'e', 'v', 'i', 'c', 'e', StopIteration)。你知道吗

相关问题 更多 >