Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 词典中的三个列表_Python 3.x - Fatal编程技术网

Python 3.x 词典中的三个列表

Python 3.x 词典中的三个列表,python-3.x,Python 3.x,我有三个列表,我想按照以下结构将其转换为字典列表: 预期产出: [{'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':

我有三个列表,我想按照以下结构将其转换为字典列表:

预期产出:

[{'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值不断重复。我猜这是因为某处正在覆盖该值。而且,它没有预期的结构,因为它都在字典中

我做错了什么?非常感谢您的帮助

谢谢

通常,您可以在列表中并行迭代。然后你可以简单地使用听写理解:

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)}
这使得=

{'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'}}
{'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'}}
通常情况下,您可以创建列表,允许您并行地迭代它们。然后你可以简单地使用听写理解:

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)}
这使得=

{'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'}}
{'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'}}

它看起来像是要一起迭代列表,并通过索引(第一个url的名字,反之亦然)匹配它们

您所做的是,对于名称列表中的每个名称,您迭代所有url,并在每次迭代中分配,您实际上覆盖了url值。最后,url列表中的最后一个url始终是每个名称的赋值

如果添加打印,您将看到每个名称的最后一个url是列表中的最后一个:

res = {} 
for x in names: 
    print(x)
    for y in urls:
        print(x, y)
        res[x] = {}
        res[x]["url"] = y
收益率:

Chamber pop
Chamber pop /wiki/Chamber_pop
Chamber pop /wiki/Dance-punk
Chamber pop /wiki/Dream_pop
Chamber pop /wiki/Dunedin_Sound
Dance-punk
Dance-punk /wiki/Chamber_pop
Dance-punk /wiki/Dance-punk
Dance-punk /wiki/Dream_pop
Dance-punk /wiki/Dunedin_Sound
Dream pop
Dream pop /wiki/Chamber_pop
Dream pop /wiki/Dance-punk
Dream pop /wiki/Dream_pop
Dream pop /wiki/Dunedin_Sound
Dunedin Sound
Dunedin Sound /wiki/Chamber_pop
Dunedin Sound /wiki/Dance-punk
Dunedin Sound /wiki/Dream_pop
Dunedin Sound /wiki/Dunedin_Sound
你能做的就是通过索引匹配它们。 当然,这里有一个隐藏的假设,即所有列表都具有相同的长度

final_res_dict = {}
for index in range(len(names)):
    name = names[index]
    final_res_dict[name] = {"url": urls[index], "description": description[index]}
    
这将产生:


它看起来像是要一起迭代列表,并通过索引(第一个url的名字,反之亦然)匹配它们

您所做的是,对于名称列表中的每个名称,您迭代所有url,并在每次迭代中分配,您实际上覆盖了url值。最后,url列表中的最后一个url始终是每个名称的赋值

如果添加打印,您将看到每个名称的最后一个url是列表中的最后一个:

res = {} 
for x in names: 
    print(x)
    for y in urls:
        print(x, y)
        res[x] = {}
        res[x]["url"] = y
收益率:

Chamber pop
Chamber pop /wiki/Chamber_pop
Chamber pop /wiki/Dance-punk
Chamber pop /wiki/Dream_pop
Chamber pop /wiki/Dunedin_Sound
Dance-punk
Dance-punk /wiki/Chamber_pop
Dance-punk /wiki/Dance-punk
Dance-punk /wiki/Dream_pop
Dance-punk /wiki/Dunedin_Sound
Dream pop
Dream pop /wiki/Chamber_pop
Dream pop /wiki/Dance-punk
Dream pop /wiki/Dream_pop
Dream pop /wiki/Dunedin_Sound
Dunedin Sound
Dunedin Sound /wiki/Chamber_pop
Dunedin Sound /wiki/Dance-punk
Dunedin Sound /wiki/Dream_pop
Dunedin Sound /wiki/Dunedin_Sound
你能做的就是通过索引匹配它们。 当然,这里有一个隐藏的假设,即所有列表都具有相同的长度

final_res_dict = {}
for index in range(len(names)):
    name = names[index]
    final_res_dict[name] = {"url": urls[index], "description": description[index]}
    
这将产生: