Python 从具有词典名称的列表中检索词典

Python 从具有词典名称的列表中检索词典,python,csv,dictionary,Python,Csv,Dictionary,我试图迭代列表中的变量是字典名,然后迭代这些字典中的键 我的代码如下: IA = {"V":"CVolt","T":"CTemp"} CLR = {"V":"CLR_Volt","T":"CLR_Temp"} GT = {"V":"GT_CVolt","T":"GT_Temp"} PP = ["IA","GT","CLR"] AFT = {"IA":0,"GT":0,"CLR":0} AFV = {"IA":0,"GT":0,"CLR":0} Voltage=0 Vs ={"IA":0.85,"

我试图迭代列表中的变量是字典名,然后迭代这些字典中的键 我的代码如下:

IA = {"V":"CVolt","T":"CTemp"}
CLR = {"V":"CLR_Volt","T":"CLR_Temp"}
GT = {"V":"GT_CVolt","T":"GT_Temp"}
PP = ["IA","GT","CLR"]
AFT = {"IA":0,"GT":0,"CLR":0}
AFV = {"IA":0,"GT":0,"CLR":0}
Voltage=0
Vs ={"IA":0.85,"GT":0.85,"CLR":0.85}
Tempreture = 0
Ts ={"IA":30,"GT":30,"CLR":30}
EAK = 7e3
Stress = {"IA":0,"GT":0,"CLR":0}
C = 1
Seff={"IA":0,"GT":0,"CLR":0}
csv.DictReader
with open(File,"r+") as Fin:
    reader = csv.DictReader(Fin, dialect='excel')
    for line in reader:
        for i in PP:
            AFT[i] = math.exp(EAK*((1/Ts[i])-(1/float(line[i["T"]]))))
            AFV[i] = math.exp(float(line[i["T"]])-Vs[i])
            Stress[i] = AFT[i] * AFV[i]
            Seff[i] = Seff[i]+Stress[i]
我的问题是如何在dictionary i中获得键的值

AFT[i] = math.exp(EAK*((1/Ts[i])-(1/float(line[i["T"]]))))
在本例中,在第一个循环中,我希望得到第[“CTemp”]


欢迎任何建议或不同的方法

您可以使用python的内置函数:

>>> IA = {"V":"CVolt","T":"CTemp"}
>>> locals()['IA']
{'T': 'CTemp', 'V': 'CVolt'}
>>> locals()['IA']['T']
'CTemp'
或者更好,将变量放在一个大目录中,如下所示:

>>> vars = {
    'IA': {"V":"CVolt","T":"CTemp"},
    'CLR': {"V":"CLR_Volt","T":"CLR_Temp"},
    ...
}
>>> vars['IA']
{'T': 'CTemp', 'V': 'CVolt'}
>>> vars['IA']['T']
'CTemp'
感谢@damienfrancois与当地人一起完成回答:

math.exp(EAK*((1/Ts[i])-(1/float(line[locals()[i]['T']]))))
使用vars dict:

math.exp(EAK*((1/Ts[i])-(1/float(line[vars[i]['T']]))))

您可以像这样更改代码

AFT[i] = math.exp(EAK*((1/Ts[i])-(1/float(line[eval(i)["T"]]))))
注意使用
eval
将字符串
IA
转换为名为
IA
的对象

不过,使用
locals()
或容器dict可能更好;见@Guy的答案