У меня есть глубоко вложенный словарь (произвольные ключи и значения), например:
data = {
'a': {
'path': '/a/a.txt'
},
'b': {
'b1': {
'path': '/b/b1/b1.txt'
},
'b2': {
'path': '/b/b2/b2.txt'
}
}
'c': {
'c1': {
'c12': {
'path': '/c/c1/c12/c12.txt'
}
},
'c2': {
'c22': {
'path': '/c/c1/c22/c22.txt'
}
},
'c3': {
'c32': {
'path': '/c/c1/c32/c32.txt'
}
}
}
.
.
.
}
Моя цель - добавить к каждому значению в словаре определенный путь. Итак, в основном возьмите приведенные выше данные, обработайте их:
def prepend(value, data):
return magic
data = prepend('predir/z', data)
и получившийся dict выглядит так:
data = {
'a': {
'path': 'predir/z/a/a.txt'
},
'b': {
'b1': {
'path': 'predir/z/b/b1/b1.txt'
},
'b2': {
'path': 'predir/z/b/b2/b2.txt'
}
}
'c': {
'c1': {
'c12': {
'path': 'predir/z/c/c1/c12/c12.txt'
}
},
'c2': {
'c22': {
'path': 'predir/z/c/c1/c22/c22.txt'
}
},
'c3': {
'c32': {
'path': 'predir/z/c/c1/c32/c32.txt'
}
}
}
.
.
.
}
Я знаю, что могу использовать рекурсию для перебора dict следующим образом:
def prepend(directory, config):
for k, v in config.items():
if isinstance(v, dict):
prepend(directory, v)
else:
# do something
Но я не могу изменить значения во время итерации. Любая помощь приветствуется! Благодарю вас!
else: # do something
? Как вы пытаетесь изменить значение? Вы пытались изменить значение вconfig[k]
вместоv
? - person furas   schedule 17.05.2020