如何解决更改python代码以摆脱exec和eval
我是python的新手,正在尝试通过删除重复使用exec()和eval()来提高代码的可读性和速度。但是,对我来说,尚不明显需要如何更改代码才能实现这一点。
我希望程序根据输入的名称来制作数据框和数组。假设输入是这样的:
A=[Red,Blue]
B=[Banana,Apple]
C=[Pie,Cake]
然后,代码将根据输入的每种组合来创建一个具有名称的数据框: 循环浏览三个列表,即可看到Red_Banana_Pie,Red_Banana_Cake,Red_Apple_Pie,Red_Apple_Cake等。
for color in A[0:len(A)]:
for fruit in B[0:len(B)]:
for type in C[0:len(C)]:
然后在每个循环中:
exec('DataFr_'+color+'_'+fruit+'_'+type+'=pd.DataFrame((Data),columns=[\'Title1\',\'Title2\'])')
没有exec命令怎么办?
解决方法
运行exec('DataFr_'+color+'_'+fruit+'_'+type+'=pd.DataFrame((Data),columns=[\'Title1\',\'Title2\'])')
时,将获得8个具有不同名称的DataFrame。但我不建议您这样做,因为每次访问数据帧时都必须使用eval()
。(否则您可以对其进行硬编码,但这确实是一件坏事)
我认为您需要用于数据帧的多维字典。
输入为
A=["Red","Blue"]
B=["Banana","Apple"]
C=["Pie","Cake"]
[+]另外,您基本上会在python中以string
的形式获得用户输入(例如"hello,world!"
)
data_set = {}
for color in A:
data_set.update({color:{}})
for fruit in B:
data_set[color].update({fruit:{}})
for type in C:
data_set[color][fruit].update({type:pd.DataFrame((Data),columns=['Title1','Title2'])})
# I think you have some Data in other place,right?
[+]此外,您可以在Python中不使用[0:len(A)]
来迭代List。
然后您可以按data_set['Red']['Banana']['Cake']
使用每个DataFrame。(您的实现将为data_set[A[0]][B[0]][C[1]]
)
然后,您可以为每种颜色,水果,没有eval的类型动态创建DataFrame,并在没有硬编码值的情况下访问它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。