首页 > 解决方案 > 字典中的三个列表

问题描述

我有三个列表,我想将它们转换为遵循此结构的字典列表:

预期输出:

[{'Chamber pop': {'url': '/wiki/Chamber_pop', 'description': 'xxx'},
{'Dance-punk': {'url': '/wiki/Dance-punk', 'description': 'yyy'}, 
{'Dream pop': {'url': '/wiki/Dream_pop', 'description': 'zzz'},
{'Dunedin Sound': {'url': 'Dunedin_Sound', 'description': 'aaa'}]

列表:

names = ['Chamber pop',
 'Dance-punk',
 'Dream pop',
 'Dunedin Sound',]

urls = ['/wiki/Chamber_pop',
 '/wiki/Dance-punk',
 '/wiki/Dream_pop',
 '/wiki/Dunedin_Sound']

description = ["xxx","yyy","zzz","aaa"]

到目前为止我尝试过的是:

res = {} 
for x in names: 
  for y in url:
      res[x] = {}
      res[x]["url"] = y

然而这段代码的输出是:

{'Chamber pop': {'url': '/wiki/Twee_pop'},
 'Dance-punk': {'url': '/wiki/Twee_pop'},
 'Dream pop': {'url': '/wiki/Twee_pop'},
 'Dunedin Sound': {'url': '/wiki/Twee_pop'}}

如您所见,url 值不断重复。我想这是因为某处覆盖了该值。此外,它没有预期的结构,因为它都在字典中。

我究竟做错了什么?将不胜感激任何帮助。

谢谢

标签: python-3.x

解决方案


通常,zip()您的列表允许您并行迭代它们。然后你可以简单地使用字典理解:

names = ['Chamber pop','Dance-punk','Dream pop', 'Dunedin Sound',]  
urls = ['/wiki/Chamber_pop', '/wiki/Dance-punk', '/wiki/Dream_pop','/wiki/Dunedin_Sound']  
description = ["xxx","yyy","zzz","aaa"]

res = {n: {'url':u, 'description':d} 
 for n, u, d in zip(names, urls, description)}

这使得 res =

{'Chamber pop': {'url': '/wiki/Chamber_pop', 'description': 'xxx'},
 'Dance-punk': {'url': '/wiki/Dance-punk', 'description': 'yyy'},
 'Dream pop': {'url': '/wiki/Dream_pop', 'description': 'zzz'},
 'Dunedin Sound': {'url': '/wiki/Dunedin_Sound', 'description': 'aaa'}}

推荐阅读