它必须是一件简单的事情,但无法理解它。我的部分脚本执行此操作:
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":{"-":{...}}}}}
。知道我怎么能把这个东西弄好吗?欢呼声!!
答案 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
)。