#python #python-3.x #list #dictionary #replace
Вопрос:
У меня есть словарь, подобный следующему:
info = {
# Many more entries similar to this one
'library1' : {'files' : ['path1', 'path2', 'path3_replace', 'path4']}
}
Моя цель состоит в том, чтобы найти и path3_replace
заменить другой путь. Вот что я попробовал:
new_path = "was_replaced"
for lib in info:
m = info[lib]
for path in m['files']:
if "replace" in path:
path = new_path
print(path)
# Here I'm just trying to print all paths to show if it worked or not
for lib in info:
m = info[lib]
for path in m['files']:
print(path)
Вывод консоли отображается следующим образом:
was_replaced
path1
path2
path3_replace
path4
Очевидно, что строка в словаре не заменяется и остается path3_replace
неизменной . Желаемый результат -:
was_replaced
path1
path2
was_replaced
path4
Как я могу этого достичь? Спасибо вам за любую помощь!
Изменить: Я намеренно оставил пример кода очень расплывчатым, чтобы изолировать проблему
Комментарии:
1. Для тех, кто проголосовал против, могу ли я получить комментарий или причину? Я хотел бы помочь, чем могу!
Ответ №1:
Строка в диктанте не заменяется, потому что вы ее никогда не меняли. Вы изменили индекс цикла, а не его источник данных. Чтобы изменить элемент списка, вам необходимо получить доступ к списку.
for idx, path in enumerate(m['files']):
if "replace" in path:
m['files'][idx] = new_path
print(m['files'][idx])
path
это просто локальная переменная.
Комментарии:
1. Потрясающе, что сработало! Я новичок в python и не знал, что
path
это всего лишь локальная переменная, я принял ваш ответ, но не могу его озвучить. Большое спасибо!2. Рад, что это помогло. Да, требуется несколько недель, чтобы привыкнуть к тому, как работают переменные.
path
это новый скаляр, который вы создали, который начинает свою жизнь как копия значения из вашего списка.