Python:eval()在lambda函数中作为map()的参数更改map()';将输入序列设置为全局()
我使用Python 3.4在map()中应用lambda函数来创建新变量 要映射的输入序列是一个dict列表。 lambda函数将在单独的配置文件中定义。为了尽量减少键入,我想在lambda中使用eval(),如下所示: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) 结果与预期一样,但似乎输入序列中的每
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-这里似乎是避免这种情况的方法:。我要把这个标记为复制品。