python - 将函数返回元组解包成键值对
问题描述
假设我有一个返回元组的函数:
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
初始化器。所以这对于已经返回元组的函数来说是完美的:
>>> dict(map(foo, list_of_vals))
{2: 200, 4: 400, 6: 600}
不过,一般来说,拥有一个返回具有相同键的键值元组的函数似乎有些罕见。最常见的是,您只有一个返回值的函数。在这些情况下,您将使用这样的字典理解:
{ x: foo(x) for x in list_of_vals }
推荐阅读
- javascript - 为什么 JS WebSocket 在 sparkjava 中会卡在 CONNECTING 上?
- terraform - Terraform Enterprise Module Registry:我可以将模块的源代码存储在现有 GitHub 存储库的子目录中吗?
- json - 如何使用 pysparkexplode() 分解结构
- python - 如何清理已转换为字符串而不解码的二进制文件?
- arduino - 使用 PN532 Arduino 将 URL 和密码保护写入 NFC (Ntag213) 标签
- python - Pandas:如何将列表作为元素添加到 DataFrame 中的单个单元格
- batch-file - 从文本文件的最后一行删除双引号
- c# - C#:当前上下文中不存在名称“Launch”
- ffmpeg - FFmpeg - 混合连接的 MP4 文件时的 A/V 同步问题
- prolog - 根据上下文不同的解释顺序?