将键列表和值列表转换为字典

12

我有这些列表:

list1 = ["a","b","c"]
list2 = ["1","2","3"]

我需要将它们添加到一个字典中,其中list1是键,list2是值。

我写了这段代码:

d = {}
for i in list1:
    for j in list2:
        d[i] = j
print d

输出结果如下:

{'a':'3','b':'3','c':'3'}

这段代码有什么问题?我该如何编写它才能得到输出结果

{'a':'1','b':'2','c':'3'}

谢谢!


问题在于j不依赖于i - 嵌套循环实际上是一个交叉应用,只保留最后一个值。与for x in range(len(list1)): i = list1[x]; j = list2[x];相比- 现在建立了一个依赖关系。但是,请查看答案中建立依赖关系的好方法。 - user166390
@user1692740:你应该接受对你有帮助的答案,这将有助于你在未来获得更多的答案... - avasal
4个回答

21

将列表压缩并使用字典推导式:

{i: j for i, j in zip(a, b)}

或者更简单的方法,只需使用dict()

dict(zip(a, b))

你应该保持简单,所以最后一个解决方案是最好的,但我保留了字典推导式的示例以展示它如何完成。


请注意,字典推导式仅适用于2.7及以上版本。 - verbsintransit

4
你已经接近成功了,除了需要同时迭代这些列表之外。
In [1]: list1 = ["a","b","c"]

In [2]: list2 = ["1","2","3"]

In [3]: d = {}

In [4]: for i, j in zip(list1, list2):
   ...:     d[i] = j
   ...:

In [5]: print d
{'a': '1', 'c': '3', 'b': '2'}

谢谢!这正是我所需要的。只是,我对Python并不是非常熟悉。"zip"是什么意思? - Aei
zip(list1, list2) 将会给你一个由元组构成的列表,如 [('a', '1'), ('b', '2'), ('c', '3')],欲知详情请参考http://docs.python.org/2/library/functions.html#zip - avasal

1

您还可以使用字典推导在一行代码中完成以下操作。

d = {i : j for i, j in zip(list1, list2)}

0
list1 = ["a","b","c"]                                                  
list2 = ["1","2","3"]                                                                                                                        
mydict = {}                                                            
for i,j in zip(list1,list2):                                           
   mydict[i] = j                                                      
print mydict   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接