如何将两个列表转换为字典(一个列表是键,另一个是值)? [复制]

Posted

技术标签:

【中文标题】如何将两个列表转换为字典(一个列表是键,另一个是值)? [复制]【英文标题】:how to convert two lists into a dictionary (one list is the keys and the other is the values)? [duplicate] 【发布时间】:2012-11-12 07:42:22 【问题描述】:

这是python中IDLE2中的代码,错误。

我需要有序地包含每个“数据”元素作为键和值“otro”。好吧,“data”和“otro”是一个包含 38 个字符串的列表,而“dik”是一个字典。

>>> for i in range(len(otro)+1):
    dik[dato[i]] = otro[i]  

Traceback (most recent call last):
  File "<pyshell#206>", line 2, in <module>
    dik[dato[i]] = otro[i]
IndexError: list index out of range
>>> 

这个问题是 range(0, 38) 输出 -> (0, 1,2,3 ... 37) 很乱

【问题讨论】:

你能大声读出最后一行,想想口译员在告诉你什么吗? 【参考方案1】:

错误来自:range(len(otro)+1)。当您使用range 时,实际上并未迭代上限值,因此例如当您说range(5) 时,您的迭代将转到0, 1, 2, 3, 4,其中位置5 是元素4。如果我们然后获取该列表元素并说for i in range(len(nums)+1): print nums[i],则最终的i 将是len(nums) + 1 = 6,如您所见,这会导致错误。

更“Pythonic”的迭代方法是不使用列表的len——你迭代列表本身,必要时使用enumerate提取索引:

In [1]: my_list = ['one', 'two', 'three']

In [2]: for index, item in enumerate(my_list):
   ...:     print index, item
   ...:
   ...:
0 one
1 two
2 three

将此应用于您的案例,然后您可以说:

>>> for index, item in enumerate(otro):
...    dik[dato[index]] = item 

尽管与 Pythonicity 主题保持一致,@mgilson 的 zip 是此构造的更好版本。

【讨论】:

-1。这可能是问题所在,但它并没有真正使代码变得更好。为什么要循环索引? for i, o in enumerate(otro): 有点“整洁”。或for d, o in zip(dato, otro):。或者 dik = dict(zip(dato,otro)) 而不是整个区块。 @Lattyware 哈,读懂我的想法——我现在正在扩充 :) @millimoose 为什么需要这里的索引? zip() 迭代器,如果你需要循环两个。 @Lattyware 因为我在提交评论后大约 0.5 秒就想到了zip() ;)【参考方案2】:

我认为是这样的:

dik = dict(zip(dato,otro))

干净一点...


如果dik 已经存在并且您只是在更新它:

dik.update(zip(dato,otro))

如果您不了解zip,您应该花点时间学习它。超级好用。

a = [ 1 , 2 , 3 , 4 ]
b = ['a','b','c','d']
zip(a,b)   #=>   [(1,'a'),(2,'b'),(3,'c'),(4,'d')] #(This is actually a zip-object on python 3.x)

zip 也可以接受更多参数 (zip(a,b,c)),例如会给你一个 3 元组列表,但这对于这里的讨论并不是非常重要。

这恰好是dict“构造函数”(类型)喜欢初始化一组key-value 对的事情之一。每个tuple 中的第一个元素是key,第二个元素是value

【讨论】:

+1。这是最好的解决方案,尽管 RocketDonkey 的回答很好地解释了当前解决方案失败的原因。 @Lattyware -- 同意。 +1 给他的 :) @mgilson +1's all around - 这绝对更干净。 没关系!!!谢谢,谢谢! muchachos es el poder de python!字典.update(zip(list1,list2))

以上是关于如何将两个列表转换为字典(一个列表是键,另一个是值)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将返回的python JSON字典转换为字典中的列表,并将数据转换为SQL插入

如何解决不正确的字母比较错误

python学习--day1(列表元组字典的区别)

如何将字典列表转换为 JSON

在字典上循环 SQL 查询

Python字典的底层实现