我有两个关于组合列表的问题 请指导我谢谢。
这是我的代码:
product['image_urls'] = [
"http://A.jpg",
"http://B.jpg",
"http://C.jpg" ]
product['image'] = [{
"url" : "http://A.jpg",
"path" : "full/1.jpg",
"checksum" : "cc76"},
{
"url" : "http://B.jpg",
"path" : "full/2.jpg",
"checksum" : "2862"},
{
"url" : "http://C.jpg",
"path" : "full/3.jpg",
"checksum" : "6982"}]
我写这个:
for url in product['image_urls']:
for info in product['image']:
print url,info['url'],info['path'],info['checksum']
结果是:
http://A.jpg http://A.jpg full/1.jpg cc76
http://A.jpg http://B.jpg full/2.jpg 2862
http://A.jpg http://C.jpg full/3.jpg 6982
http://B.jpg http://A.jpg full/1.jpg cc76
http://B.jpg http://B.jpg full/2.jpg 2862
http://B.jpg http://C.jpg full/3.jpg 6982
http://C.jpg http://A.jpg full/1.jpg cc76
http://C.jpg http://B.jpg full/2.jpg 2862
http://C.jpg http://C.jpg full/3.jpg 6982
但我想要的是这个
http://A.jpg http://A.jpg full/1.jpg cc76
http://B.jpg http://B.jpg full/2.jpg 2862
http://C.jpg http://C.jpg full/3.jpg 6982
因为我想像Image.objects.create(article=id,image_urls=url,url=info['url'],path=info['path'],checksum=info['checksum'])
我如何将它们组合起来以达到它?
我的第二个问题是,您可以看到product['image_urls']
和product['image']['url']
相同。
但有时product['image']
会有空值(因为它在捕获图像时失败),如:
product['image_urls'] = [
"http://A.jpg",
"http://B.jpg",
"http://C.jpg" ]
product['image'] = [{
"url" : "http://A.jpg",
"path" : "full/1.jpg",
"checksum" : "cc76"},
{
"url" : "http://C.jpg",
"path" : "full/3.jpg",
"checksum" : "6982"}]
因此,如果我只是压缩它们,它会将错误的数据保存到数据库,因为"url" : "http://B.jpg",
缺失:
[('http://A.jpg', {'url': 'http://A.jpg', 'path': 'full/1.jpg', 'checksum': 'cc76'}), ('http://B.jpg', {'url': 'http://C.jpg', 'path': 'full/3.jpg', 'checksum': '6982'})]
请教我如何将它们结合起来? 非常感谢你
答案 0 :(得分:0)
对于第一个列表中的每个项目,只有在第二个列表中的相应项目存在时才打印。
我们构建了一个临时字典,由第一个列表中的项目键入,并在打印时查阅:
# "images" will contain exactly the same info as "product['image']", but
# keyed by the URL.
images = { d['url']:d for d in product['image'] }
# Print every line implied by the first data set
for url in product['image_urls']:
# But only if the data is actually in the second data set
if url in images:
image = images[url]
print url, image['url'], image['path'], image['checksum']
# Or ...
# Image.objects.create(article=id,
# image_urls=url,
# url=image['url'],
# path=image['path'],
# checksum=image['checksum'])
# Or fancier,
# Image.objects.create(article=id, images_urls=url, **image)