从两个可迭代对象创建字典并同时使用它们

Posted

技术标签:

【中文标题】从两个可迭代对象创建字典并同时使用它们【英文标题】:Creating a dictionary from two iterables and consuming both of them 【发布时间】:2011-06-11 21:28:23 【问题描述】:

假设我有两个列表,我想用它们制作字典。喜欢:

>>> l = [1, 2, 3, 4, 5]
>>> x = ['a', 'b', 'c']
>>> dict(zip(l, x))
1: 'a', 2: 'b', 3: 'c'

这可以按我的意愿工作,并且由于列表的长度不相等,因此元素 45 被忽略了,并且它们没有对应的值。这和预期的一样。

但是如果我想要一个值,比如 None 中的键值 l 怎么办?我希望输出是:

1: 'a', 2: 'b', 3: 'c', 4: None, 5: None

我认为的解决方案之一是遍历两者,比较它们的长度并在需要的地方附加None。我有一个同样有效的解决方案,但我想知道是否可以以更简单、更短的方式完成它?

【问题讨论】:

【参考方案1】:

使用

dict(itertools.izip_longest(l, x))
# 1: 'a', 2: 'b', 3: 'c', 4: None, 5: None

【讨论】:

嘿,完美!我猜有这样的东西存在! 顺便说一句:在 Python 3 上,它被称为“zip_longest”(没有前导“i”)。

以上是关于从两个可迭代对象创建字典并同时使用它们的主要内容,如果未能解决你的问题,请参考以下文章

构成可迭代对象的要素

可迭代对象迭代器生成器的理解

具有可迭代对象的字典字典到具有多索引的可迭代对象索引的熊猫数据框

搞懂python中的可迭代对象和迭代器对象(即迭代器)

可迭代对象和迭代器

任何可迭代对象的值(而不是键)的通用迭代器