将列表转换为字典引用列表



我有一个字符串列表:

listofdictrefs = ["ws['D4']", "ws['H72']", "ws['B4']"]

这些字符串实际上是字典引用。我想将该列表转换为变量引用,这样我就可以将这些变量写入csv行:

csvwriter.writerow(listofdictrefs)

当然,现在,它将列表写为字符串。我想知道引用与该名称匹配的变量(在本例中为字典条目)。

如果ws是字典变量的实际名称,则可以使用evals写出它,尽管这很容易出错。即使在不处理不受信任的输入的情况下(所以,让我们把安全问题放在一边),当可以静态检查语法和大量语义分析时,也会将其推送到运行时。尽管如此:

csvwriter.writerow(eval(r) for r in listofdictrefs)

然而,如果可能的话,你最好保留一个密钥列表,并为ws dict 编制索引

keys = ['D4', 'H72', 'B4']
csvwriter.writerow(ws[k] for k in keys)

eval很少是正确的解决方案。

在这种情况下可以使用eval。不过,始终要小心使用eval运行未检查的代码!

listofdictrefs = ["ws['D4']", "ws['H72']", "ws['B4']"]
ws = {'D4' : 100,'H72' : 50,'B4' : 25}
for ref in listofdictrefs:
    print eval(ref)

100
50
25

最新更新