使用推导式创建字典

1573 投票
17 回答
1179598 浏览
提问于 2025-04-15 16:06

我可以用列表推导的语法来创建一个字典吗?

比如,通过遍历键和值的配对:

d = {... for k, v in zip(keys, values)}

17 个回答

73

其实,如果你已经有了一种映射的结构,比如字典,你就不需要一个一个地去遍历这个可迭代对象了。字典的构造函数会帮你自动处理这些事情。

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}
296

在Python 3和Python 2.7及以上版本中,字典推导式的写法如下:

d = {k:v for k, v in iterable}

如果你使用的是Python 2.6或更早的版本,可以查看fortran的回答

2320

使用 字典推导式(适用于Python 2.7及更高版本):

{key: value for key, value in zip(keys, values)}

另外,你也可以使用 dict 构造函数:

pairs = [('a', 1), ('b', 2)]
dict(pairs)                          # → {'a': 1, 'b': 2}
dict((k, v + 10) for k, v in pairs)  # → {'a': 11, 'b': 12}

如果你有单独的键和值的列表,可以用 dict 构造函数配合 zip 来创建字典:

keys = ['a', 'b']
values = [1, 2]
dict(zip(keys, values))              # → {'a': 1, 'b': 2}

撰写回答