假设我有一个返回元组的函数:
def foo(x):
return (x, x*100)
我有一个值列表,我想要应用该函数,然后将结果转换为字典:
list_of_vals = [2, 4, 6]
result = {...magic comprehension...}
print(result)
# {2: 200, 4: 400, 6: 600}
我想出了两种方法:
{ k: v for k, v in map(foo, list_of_vals)}
{ k: v for k, v in (foo(val) for val in list_of_vals} # equivalently
要么:
def helper_bar(vals):
for val in vals:
yield(foo(val))
{k: v for k, v in helper_bar(vals)}
但是,这些都不是非常易读.此外,如果list_of_vals非常庞大,我不想创建额外的副本.假设我有很长的值列表并且foo是一个昂贵的函数,有没有更好的(有效的?)方法来做到这一点?
解决方法:
您还可以使用带有可迭代键值元组的dict initializator.所以这对于已经返回元组的函数来说是完美的:
>>> dict(map(foo, list_of_vals))
{2: 200, 4: 400, 6: 600}
通常,具有返回具有相同键的键值元组的函数似乎有点罕见.最常见的是,您只需要一个返回值的函数.在这些情况下,您将使用这样的字典理解:
{ x: foo(x) for x in list_of_vals }
标签:python,python-3-x
来源: https://codeday.me/bug/20190727/1549441.html