实现以下功能的最佳方式是什么:
i= 0
imagesdict = dict()
for image in list(glance.images.list()):
d = image._info
imagesdict[i] = d
i=i+1
return json.dumps(imagesdict)
答案 0 :(得分:3)
只需使用enumerate
在迭代中获取当前索引,就像这样
for i, image in enumerate(glance.images.list()):
imagesdict[i] = image._info
更好的是,你可以使用词典理解,就像这样
json.dump({i: image._info for i, image in enumerate(glance.images.list())})
答案 1 :(得分:1)
这看起来有点奇怪 - 如果你正在制作所有的密钥,你为什么要创建一个字典呢?为什么不使用列表并索引每个元素?
无论如何,你可以使用字典理解来压缩它:
imagesdict = {i: image._info for i, image in enumerate(glance.images.list())}
enumerate函数的作用是在一个列表中,并返回一个用它捆绑索引的新函数。因此,如果我执行enumerate(['a', 'b', 'c'])
,则输出将为[(0, 'a'), (1, 'b'), (2, 'c')]
。
因此,一旦我们执行enumerate(glance.images.list())
,下一步就是将其转换为实际字典。你可以使用普通的for循环,甚至更好的字典理解,将最终的dict放在一行。
答案 2 :(得分:1)
您可以在此处使用列表而不是字典:
json.dumps([image._info for image in glance.images.list()])
如果输出格式被控制范围之外的代码占用,则无法更改输出格式,然后获取传达相同信息的json对象:
json.dumps(dict(enumerate(image._info for image in glance.images.list())))