以下内容适用于我当前的脚本:
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'*
我已经尝试了其他一些方法来转换输入的值,但我很难将其工作。
答案 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库),但对于像您这样的简单案例,只需迭代或递归在钥匙上就是你所需要的一切。