我有一个函数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()}
但是这还没有循环遍历所有密钥吗?
这是否会使循环更慢,因为它存储密钥和放大器值?
答案 0 :(得分:2)
你可以做到
d = {k: f(v) for k, v in d.iteritems()}
但是这将创建一个新的字典(而不是修改原文)。在许多情况下,无论如何这都是你想要的。 (在大多数情况下,这也适用于熊猫。)没有直接的快捷方式来修改原始字典的值。
从您的编辑中,听起来您关注的是性能。基本的Python类型不具备由pandas和numpy提供的那种矢量化操作(即,在整个结构上运行'一次")。这就是为什么numpy被创造出来的原因。如果性能是您的目标,那么您应该根据用例对实际数据进行基准测试。一般来说,如果操作本身是可以矢量化的数值操作,那么操作本身就会更快,但是创建新的numpy数组(包括改变其大小的操作,例如append
)相对较慢。