将函数参数传递给dict?

时间:2018-04-09 22:38:36

标签: python json dictionary

以下内容适用于我当前的脚本:

item_dict = json_data
numOfKids = len(item_dict['contents']['rootFeature']['childFeatures'])
print(str(numOfKids))
while numOfKids > 0:
    numOfKids = numOfKids - 1
    assert 'handle' in json_data['contents']['rootFeature']['childFeatures'][numOfKids] 
    handleItem = json_data['contents']['rootFeature']['childFeatures'][numOfKids]['handle']
    print("Child : " + handleItem)
else:
    print("Done")

我正在尝试使用以下内容将其移动到自己的函数中:

def validateChildren(json_data, parentPath):
    item_dict = json_data
    childList = item_dict + parentPath    
    numOfKids = len(childList)
    print(str(numOfKids))
    while numOfKids > 0:
        numOfKids = numOfKids - 1
        childPath = json_data + parentPath + "[" + numOfKids + "]"
        childHandle = json_data + parentPath + "[" + numOfKids + "][handle]"
        assert 'handle' in childPath
        handleItem = childHandle
        print("Child : " + handleItem)
    else:
        print("Done")

使用以下方法调用函数时:

validateChildren(json_data, "['contents']['rootFeature']['childFeatures']")

我收到错误:

TypeError: unsupported operand type(s) for +: 'dict' and 'str'*

我已经尝试了其他一些方法来转换输入的值,但我很难将其工作。

1 个答案:

答案 0 :(得分:3)

您不能只使用像join这样的Python代码片段,并将其附加到某个对象,并希望它能像您使用该代码一样工作。

在非常罕见的情况下,您确实需要这样做,您可以在整个表达式中构建一个字符串并调用>>= - 但这不是极少数情况下的一个。< / p>

您实际上要做的是应用&#34;关键路径&#34;到嵌套的词典。最好的方法就是这样:

"['contents']['rootFeature']['childFeatures'']"

validateChildren(json_data,(&#39;内容&#39;,&#39; rootFeature&#39;,&#39; childFeatures&#39;)

如果您正在尝试执行更复杂的操作,例如获取所有eval的列表,或者从用户接受路径作为字符串,而不是使用您已经拥有的字符串变量构建它另外,您可能希望查看类似dpath的内容(或者,如果您正在处理Cocoa而不是互联网内容,可能是KVC库),但对于像您这样的简单案例,只需迭代或递归在钥匙上就是你所需要的一切。