我在pandas中进行了一个复杂的聚合,并在Python词典中发现了一个不寻常的问题。
当我这样做时:
g = {
"grade": dict(
["is_" + val, (lambda x: val)]
for val in ['A', 'B', 'C', 'D', 'E', 'F']
)
}
我原以为我会得到多个功能:g['grade']['is_A']
,g['grade']['is_B']
,g['grade']['is_C']
,...每个功能都会回复A
,B
,C
,......分别。
问题是他们都给我返回值F
(迭代器中的最后一项)
In []: g['grade']['is_A'](1)
Out[]: 'F'
In []: g['grade']['is_B'](1)
Out[]: 'F'
In []: g['grade']['is_C'](1)
Out[]: 'F'
...
In []: g['grade']['is_F'](1)
Out[]: 'F'
即使没有参数的lambda也会给出相同的值。我假设这种情况正在发生,因为当我运行lambda
时,它正在寻找变量val
并发现val
在最后一次迭代中引用了'F'。
我有没有办法在字典生成器中使用实际值?
我基本上想为is_VALUE创建300-400个函数,其中值是从另一个地方动态获取的。