我正在使用一个在类中有操作的包(?不确定是什么),通常数据以这种方式调用data[package.operation]
。因为我必须做多个操作,想要缩短它并执行以下操作
list =["o1", "o2", "o3", "o4", "o5", "o6"]
for i in list:
print data[package.i]
但由于它将i
视为一个字符串,它不会执行操作,如果我拿掉字符串,那么它是一个未定义的变量。有办法解决这个问题吗?或者我只需要写很长的路?
特别是我正在使用pymatgen
,其包Orbital
以及.operation
我想要调用特定的子轨道。如何使用它的一个真实示例是data[0][Orbital.s]
,第一个[0]表示要获取轨道s
的有问题的元素(这就是我在代码中省略它的原因)上文)。
答案 0 :(得分:2)
您可以使用getattr
从对象中动态选择属性(在您的情况下为Orbital
包;例如getattr(Orbital, 's')
)。
因此您的循环将被重写为:
for op in ['o1', 'o2', 'o3', 'o4', 'o5', 'o6']:
print(data[getattr(package, op)])