在字典查找中使用Python列表或字符串?

时间:2017-02-10 15:27:29

标签: python json dictionary

使用案例

我在Python中制作一个工厂类型脚本,它使用XML并基于该XML,从特定工厂返回信息。我创建了一个文件,我称之为FactoryMap.json,它存储了可以在XML中找到项目的位置与相应工厂之间的映射。

问题

我的映射文件中的JSON如下所示:

{

      "path": "['project']['builders']['hudson.tasks.Shell']",
      "class": "bin.classes.factories.step.ShellStep"

}

path 一旦转换为dict,就可以在xml中找到该元素。

class 是工厂的相应路径,可以使用该元素信息。

为了对此做任何事情,我需要深入到字典结构中,如果我不必从文件中绘制这些信息,那么这将是这样的(注意关键参考='路径来自我的json'):

configDict={my xml config dict}
for k,v in configDict['project']['builders']['hudson.tasks.Shell'].iteritems():
    #call the appropriate factory

问题在于,如果我将路径值查找为字符串或列表,我就无法在' iteritems'()中使用它:

path="['project']['builders']['hudson.tasks.Shell']" #this is taken from the JSON
for k,v in configDict[path].iteritems():
    #call the appropriate factory

这会返回一个关键错误,指出我不能使用字符串作为键值。如何将变量用作该python字典的键?

2 个答案:

答案 0 :(得分:0)

您可以使用eval

eval( "configDict"+path )

答案 1 :(得分:0)

您可以使用eval()函数来评估实际dict对象与字符串的路径。这是我所说的:

path="['project']['builders']['hudson.tasks.Shell']" #this is taken from the JSON
d = eval("configDict%s" % path)
for k,v in d.iteritems():
#call the appropriate factory
相关问题