解压函数将元组返回键值对

时间:2018-08-15 08:14:53

标签: python python-3.x

假设我有一个返回元组的函数:

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是一个昂贵的函数,还有什么更好的方法(有效吗?)?

2 个答案:

答案 0 :(得分:6)

您还可以使用dict initializator,它采用键值元组的可迭代方式。因此,这对于已经返回元组的函数将是完美的:

>>> dict(map(foo, list_of_vals))
{2: 200, 4: 400, 6: 600}

尽管如此,总的来说,具有返回具有相同键的键值元组的函数似乎很少。最常见的是,您只有一个返回值的函数。在这种情况下,您将使用像这样的字典理解:

{ x: foo(x) for x in list_of_vals }

答案 1 :(得分:1)

只需将map的结果直接转换为dict

>>> list_of_vals = [2, 4, 6]
>>> dict(map(foo, list_of_vals))
{2: 200, 4: 400, 6: 600}