Например, у меня есть следующий Dict:Более вещий способ изменить многоуровневый словарь значений
{'foo': 'test',
'bar': {'test1': 'some text here'},
'baz': {'test2': {'test3': 'some text here', 'test4': 'some text here'}}}
Или что-то вроде этого, может быть, больше уровней.
Теперь вопрос в том, что я хочу изменить ... 'some text here'
до 'A test'
. Да, я могу использовать много for
петель как следующий код:
d = {'foo': 'test',
'bar': {'test1': 'some text here'},
'baz': {'test2': {'test3': 'some text here',
'test4': 'some text here'}}}
for i in d:
if d[i] == 'some text here':
d[i] = 'A test'
elif type(d[i]) == dict:
for j in d[i]:
if d[i][j] == 'some text here':
d[i][j] = 'A test'
elif type(d[i][j]) == dict:
for n in d[i][j]:
if d[i][j][n] == 'some text here':
d[i][j][n] = 'A test'
__import__('pprint').pprint(d)
Выход:
{'bar': {'test1': 'A test'},
'baz': {'test2': {'test3': 'A test', 'test4': 'A test'}},
'foo': 'test'}
Однако я не думаю, что это хороший способ ... Есть идеи?
@ user2393267: Это называется тегами, а не метками :) –
Каков критерий замены, точное соответствие любого значения на любой глубине? –
@ qarma: Ну, на самом деле я сказал, что в моем вопросе: * Может быть, больше уровней *. –