我有python列表和字典的嵌套结构。你知道吗
tree = { 'blah': [ "booz", {'foobar': [ { 'somekey': 'someval' } ] } ] }
我还有几个递归函数,允许我从上到下遍历tree
层次结构,并返回所需的键和值。例如:
def get_objectcontent(obj, objid):
result = None
if isinstance(obj, dict):
for key, val in obj.items():
if key == objid:
result = val
elif isinstance(val, list) or isinstance(val, dict):
retval = get_objectcontent(val, objid)
if retval is not None:
result = retval
elif isinstance(obj, list):
for elem in obj:
if isinstance(elem, list) or isinstance(elem, dict):
retval = get_objectcontent(elem, objid)
if retval is not None:
result = retval
return result
不幸的是,我也想修改tree
中的数据,这就是问题所在。我能看到的唯一可能的解决方案是在遍历tree
时动态构造元素的“路径”,并构造如下内容:
tree['blah'][1]['foobar'][0]['somekey']) = 'newval'
我没有找到任何方法来指出Python中的键(当我知道它在结构中的位置时)。你知道吗
在Python3中有没有其他更智能的方法来解决这个问题?你知道吗
您最终将
objid
作为dict
中的键,因此可以更改:收件人:
然后调用方可以执行以下操作:
您还可以考虑用
return
语句替换对result
的赋值,前提是您不介意获取第一个实例而不是最后一个实例。你知道吗相关问题 更多 >
编程相关推荐