循环函数 python
Looping functions python
我有一个函数 f(x),我想将其应用于字典或列表中的每个项目。
我记得在 Pandas 库中,您可以将函数应用于整个数据框。是否可以在普通 python 代码中执行此操作?
有什么方法可以简化以下内容吗?
d = {1:'item1','2':'item2','a':'item1','b':'random'}
f = lambda x: 'SomeValue' if x == 'item1' else x
for key in d.keys():
d[key] = f(d[key])
编辑:
我知道 d = {key: f(value) for key,value in d.iteritems()}
但这不是仍然循环遍历所有键吗?
这是否会使循环变慢,因为它正在存储键和值?
你可以做到
d = {k: f(v) for k, v in d.iteritems()}
但这将创建一个新的字典(而不是修改原始字典)。在许多情况下,这就是您想要的。 (在大多数情况下,这也是它在 pandas 中的工作方式。)没有直接的快捷方式来就地修改原始字典的值。
从您的编辑来看,您似乎很关心性能。基本 Python 类型没有 pandas 和 numpy 提供的那种向量化操作(即,“一次”对整个结构进行操作)。这就是创建 numpy 的原因。如果性能是你目标,您应该针对您的用例对这两种方法进行基准测试。一般来说,如果操作是可以矢量化的数字操作,则操作本身在 numpy 中更快,但是创建新的 numpy 数组(包括更改其大小的操作,比如append
)比较慢。
我有一个函数 f(x),我想将其应用于字典或列表中的每个项目。
我记得在 Pandas 库中,您可以将函数应用于整个数据框。是否可以在普通 python 代码中执行此操作?
有什么方法可以简化以下内容吗?
d = {1:'item1','2':'item2','a':'item1','b':'random'}
f = lambda x: 'SomeValue' if x == 'item1' else x
for key in d.keys():
d[key] = f(d[key])
编辑:
我知道 d = {key: f(value) for key,value in d.iteritems()}
但这不是仍然循环遍历所有键吗?
这是否会使循环变慢,因为它正在存储键和值?
你可以做到
d = {k: f(v) for k, v in d.iteritems()}
但这将创建一个新的字典(而不是修改原始字典)。在许多情况下,这就是您想要的。 (在大多数情况下,这也是它在 pandas 中的工作方式。)没有直接的快捷方式来就地修改原始字典的值。
从您的编辑来看,您似乎很关心性能。基本 Python 类型没有 pandas 和 numpy 提供的那种向量化操作(即,“一次”对整个结构进行操作)。这就是创建 numpy 的原因。如果性能是你目标,您应该针对您的用例对这两种方法进行基准测试。一般来说,如果操作是可以矢量化的数字操作,则操作本身在 numpy 中更快,但是创建新的 numpy 数组(包括更改其大小的操作,比如append
)比较慢。