我喜欢 Python 列表理解语法。
它也可以用来创建字典吗?例如,通过迭代成对的键和值:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
在 Python 2.6 及更早版本中,dict 构造函数可以接收可迭代的键 / 值对:
d = dict((key, value) for (key, value) in iterable)
从 Python 2.7 和 3 开始,您可以直接使用dict 理解语法 :
d = {key: value for (key, value) in iterable}
当然,您可以以任何您想要的方式使用 iterable(元组和列表文字,生成器理解,列表推导,生成器函数,函数组合...... 感觉有创意),只要每个元素本身是两个元素的可迭代:
d = {value: foo(value) for value in sequence if bar(value)}
def key_value_gen(k):
yield chr(k+65)
yield chr((k+13)%26+65)
d = dict(map(key_value_gen, range(26)))
额外奖励:如果您想迭代键列表key_list
以及值列表value_list
:
d = dict((key, value) for (key, value) in zip(key_list, value_list))
要么
d = {(key, value) for (key, value) in zip(key_list, value_list)}
在 Python 3 和 Python 2.7 + 中,字典理解如下所示:
d = {k:v for k, v in iterable}
对于 Python 2.6 或更早版本,请参阅fortran 的答案 。
事实上,如果它已经理解了某种映射,你甚至不需要迭代迭代,dict 构造函数会为你做得很好:
>>> 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}