我无法使用 for 循环从两个列表构建字典

时间:2021-03-29 17:09:19

标签: python loops dictionary

谢谢你帮助我。我正在学习 Python,但我无法通过运行两个 for 循环来对单个字典中的所有信息进行响应。

看这个例子,如果我像这样运行循环......

mylist1 = ["image1", "image2", "image3"]
pictures_list = ["image1_url", "image2_url", "image3_url"]
mydict = {}
for item in mylist1:
    mydict['name'] = item
    for url in pictures_list:
        mydict['url'] = url
        print(mydict)

我有这个答案,它重复了 3 次

{'name': 'image1', 'url': 'image1_url'}
{'name': 'image1', 'url': 'image2_url'}
{'name': 'image1', 'url': 'image3_url'}
{'name': 'image2', 'url': 'image1_url'}
{'name': 'image2', 'url': 'image2_url'}
{'name': 'image2', 'url': 'image3_url'}
{'name': 'image3', 'url': 'image1_url'}
{'name': 'image3', 'url': 'image2_url'}
{'name': 'image3', 'url': 'image3_url'}

如果我像这样在打印语句中删除一个缩进...

mylist1 = ["image1", "image2", "image3"]
pictures_list = ["image1_url", "image2_url", "image3_url"]
mydict = {}
for item in mylist1:
    mydict['name'] = item
    for url in pictures_list:
        mydict['url'] = url
    print(mydict)

我通过单次迭代来添加键,但它不会迭代值分配。

{'name': 'image1', 'url': 'image3_url'}
{'name': 'image2', 'url': 'image3_url'}   
{'name': 'image3', 'url': 'image3_url'}  

所以我想知道如何实际构建代码以获得这样的输出

{'name': 'image1', 'url': 'image1_url'}
{'name': 'image2', 'url': 'image2_url'}   
{'name': 'image3', 'url': 'image3_url'}  

2 个答案:

答案 0 :(得分:2)

zip 会将您的两个列表打包成一个列表,其中每个列表中具有相同索引的项目将被放入一个元组中:

print(list(zip(mylist1,pictures_list)))

输出:

[('image1', 'image1_url'), ('image2', 'image2_url'), ('image3', 'image3_url')]

由于 dict 可以获取元组列表并将它们转换为字典,因此您可以使用:

dictionary = dict(zip(mylist1,pictures_list))
print(dictionary)

输出:

{'image1': 'image1_url', 'image2': 'image2_url', 'image3': 'image3_url'}

这不仅为您的问题提供了简洁易读的解决方案,而且时间复杂度为 O(n),比您的 O(n**2) 尝试有所改进。

答案 1 :(得分:0)

类似于下面的内容

images = ["image1", "image2", "image3"]
urls = ["image1_url", "image2_url", "image3_url"]
data = [{'name': images[i], 'url': urls[i]} for i in range(len(images))]
print(data)

输出

[{'name': 'image1', 'url': 'image1_url'}, {'name': 'image2', 'url': 'image2_url'}, {'name': 'image3', 'url': 'image3_url'}]