У меня есть вложенная структура списков и словарей python.Доступ к элементам в произвольно вложенной структуре списков/dicts
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 (когда я знаю, где это в структуре).
Есть ли какой-нибудь другой, более разумный способ решить эту проблему в Python 3?
спасибо, удивительно простой. – tvm