Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:eval()在lambda函数中作为map()的参数更改map()';将输入序列设置为全局()_Python_Dictionary_Pandas_Lambda - Fatal编程技术网

Python:eval()在lambda函数中作为map()的参数更改map()';将输入序列设置为全局()

Python:eval()在lambda函数中作为map()的参数更改map()';将输入序列设置为全局(),python,dictionary,pandas,lambda,Python,Dictionary,Pandas,Lambda,我使用Python 3.4在map()中应用lambda函数来创建新变量 要映射的输入序列是一个dict列表。 lambda函数将在单独的配置文件中定义。为了尽量减少键入,我想在lambda中使用eval(),如下所示: dat = [{'a':1, 'b':2}, {'a':2,'b':1}] a_transformation = 'a > 1' temp = map(lambda x: eval(a_transformation,x), dat) 结果与预期一样,但似乎输入序列中的每

我使用Python 3.4在map()中应用lambda函数来创建新变量

要映射的输入序列是一个dict列表。 lambda函数将在单独的配置文件中定义。为了尽量减少键入,我想在lambda中使用eval(),如下所示:

dat = [{'a':1, 'b':2}, {'a':2,'b':1}]
a_transformation = 'a > 1'
temp = map(lambda x: eval(a_transformation,x), dat)
结果与预期一样,但似乎输入序列中的每个项目都已更改为global()的输出

我可以在熊猫身上做类似的事情,没有问题:

import pandas
dat = [{'a':1, 'b':2}, {'a':2,'b':1}]
dat_pandas = pandas.DataFrame(a)
a_transformation = 'a > 1'
temp = dat_pandas.eval(a_transformation, engine='python')
但我宁愿不用熊猫

有什么想法吗


谢谢

您是否愿意阅读
eval
?“如果globals字典存在且缺少
”\uuuu内置项\uuuuuuu'
,则在解析表达式之前将当前全局项复制到全局项中。这意味着表达式通常具有对标准内置项模块的完全访问权限,并传播受限环境。”感谢@AshwiniChaudhary,我在搜索时没有在文档中看到这一点。不过我有点困惑——有没有办法避免发生什么?我的意思是,如果我通过eval copy(dat)而不是仅仅通过dat,我可以保留输入,但我不确定这是否是我想要的最有效的方式(dat在实践中要大得多,所以我希望避免复制它)。谢谢Nevermind-这里似乎是避免这种情况的方法:。我要把这个标记为复制品。