dict迭代器中的Lambda给出最后一个值

时间:2018-05-23 08:02:47

标签: python dictionary lambda

我在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'],...每个功能都会回复ABC,......分别。

问题是他们都给我返回值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个函数,其中值是从另一个地方动态获取的。

0 个答案:

没有答案