在python中迭代dict时获取当前迭代计数的最佳方法是什么

时间:2014-09-10 03:33:09

标签: python python-2.7

实现以下功能的最佳方式是什么:

i= 0
imagesdict = dict()
for image in list(glance.images.list()):
    d = image._info
    imagesdict[i] = d
    i=i+1
return json.dumps(imagesdict)

3 个答案:

答案 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())))