@Span4ev

Как перебрать словарь и изменить значение ключей?

Здравствуйте. Нужно перебрать словарь на ключ-значение и если ключ совпадает с переданным в функцию - изменить значение этого ключа на 1, а остальные на 0.
Для примера в словаре только две пары. Но это нужно для движка Renpy, а не для чистого питона.

########
Кажется я понял как нужно, но вопрос удалять пока не буду, вдруг чего...
for i in dic.keys():
            if dic[i] == name:
                dic[i] = x
            else:
                dic[i] = y

Вроде так нужно.
########

Как я делаю:

init python:

	stats_info_names = {
	    'anna_info': 0,
	    'kira_info': 0,
	}

	def change_bool_dict(dic, name, x, y):
	
	    for i in dic.keys():
	        if i[0] == name:
	            i[1] = x
	        else:
	            i[1] = y

# Как вызываю саму функцию
vbox:
    if anna_meet:
        textbutton 'Anna':
            action Function(change_bool_dict, stats_info_names, anna_info, 1, 0)


Если не знакомы с Renpy - не важно. Просто синтаксис другой, суть та же:
Действие для кнопки - "action", затем вызов функции и название функции "change_bool_dict",
и передача в неё 4 аргументов.
Нужно проверить словарь на наличие второго аргумента "anna_info",
и изменить его значение на 1, а остальным на 0. Так как объектов в словаре будет больше чем два, и они будут меняться на разных кнопках, хочу массово менять всем значения, чтобы скрывать их из виду, и отображать только один текущий объект.

Но я получаю ошибку "typle object does not support item assignment"
Вроде верно перебираю словарь, но похоже, что нет.
  • Вопрос задан
  • 766 просмотров
Решения вопроса 1
@Span4ev Автор вопроса
Надеюсь это не дурной тон - найдя решение, опубликовать собственный ответ. Но может кому-то поможет. Больше 5 часов сидел над этой проблемой

Во-первых, сам перебор должен быть таким:

for key in dic.keys():
            if key == name:
                dic[key] = 1
            else:
                dic[key] = 0


Во-вторых, моя ошибка в том, что вызывая функцию и передавая в неё аргумент, я передал переменную "anna_info" без кавычек (но я видел в чужом примере, как значение передавали без кавычек. Именно поэтому решил, что синтаксис именно таков).
action Function(change_bool_dict, stats_info_all_names, 'anna_info')

Икс и игрек убрал. Помогло то, что начал экспериментировать с перебором только в онлайн python IDE
Ну вот и методом тыка набрёл на результат.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
rocketmachine
@rocketmachine
a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
for key in a_dict:
   print(key)
   if a_dict['color'] == 'blue': 
            a_dict['color'] = 'white'
Ответ написан
OSMANOF
@OSMANOF
Segmentation fault
for i in dic.keys():
      if dic[i] == name:
          dic[i] = x
      else:
          dic[i] = y
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы