Python – как динамически изменить значение словаря

Я пытаюсь использовать словарь таким образом, чтобы он динамически возвращал значение. Следующий код должен сначала напечатать «hello», а затем «world». На данный момент он печатает «привет» два раза. Есть ли способ использовать этот словарь динамически?

val = "hello"
test = {
  "A" : val
}
print(test["A"])
val="world"
print(test["A"])

Я не могу понять, чего вы пытаетесь достичь здесь. Не могли бы вы более конкретно и привести более полезный пример?

Riccardo Bucco 10.04.2022 18:42

То, о чем вы спрашиваете, на самом деле невозможно в Python и намекает на непонимание разницы между именами, такими как var, и такими значениями, как "world". Похоже, вам следует сделать шаг назад и подумать о том, как вы моделируете свои данные в программе. Наличие волшебных побочных эффектов, таких как изменение значения словаря при переопределении переменной, кажется мне ужасным планом. Но трудно сказать больше, учитывая упрощенный пример, который не иллюстрирует реальную проблему, которую вы пытаетесь решить.

Mark 10.04.2022 18:52
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
2
2
36
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вместо val="world" используйте test["A"] = "world"

Да, это возможно в приведенном мной примере. Мой код, однако, больше, и переменная "val" может меняться во многих местах кода, и было бы громоздко добавлять эту строку во все возможные места.

ampersander 10.04.2022 18:39
Ответ принят как подходящий

Я думаю, что это неправильное использование словарей. Не могли бы вы выполнить все задание?

Вы также можете проверить значения и изменить значение словаря

val = "hello"
test = {
  "A" : val
}
print(test["A"])
val="world"
if test["A"]!=val: test["A"]=val
print(test["A"])

Задача немного сложнее. Проще говоря, у меня есть класс Frame(), в котором есть variables[]. Есть глобальный фрейм GF, временный фрейм TF и стек локальных фреймов LF_Stack. Затем у меня есть класс Variable со строковым атрибутом frame (который может быть «GF», «TF», «LF»). По этому атрибуту мне нужно добавить эту переменную в список переменных в кадре переменной. Я использовал для этого словарь (он работает, когда первыми значениями были GF, TF (которые ссылаются на объекты), но LF_Stack.frames[-1]) не работал.

ampersander 10.04.2022 18:45

val = "world" присваивает переменной новую строку, но не изменяет существующую строку. Однако словарь test сохраняет старое строковое значение, а не ссылку на переменную val. Вам нужно использовать другую изменяемую структуру данных, если вы хотите обновить словарь таким образом. Просто для иллюстрации я показываю, как будет работать список:

val = ["hello"]
test = { "A" : val }
print(test["A"][0])
val[0] = "world"
print(test["A"][0])

В отличие от строки, список можно обновлять. test сохраняет то же значение (список), что и val (в этом примере только один список), но val изменяется внутренне.

Обратите внимание, что вы не должны использовать val = ["world"], так как это снова просто назначит новый список val, но оставит test без изменений, т.е. по-прежнему ссылается на старый список, содержащий "hello".

Другие вопросы по теме