Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 28.01.2018
Сообщений: 10

Не работает перебор словаря и замена значения с проверкой по ключу

09.07.2022, 04:56. Показов 653. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте, друзья. Уже несколько часов не могу решить проблему.
Я работаю с Renpy (движок для визуальных новелл).
Не буду отнимать ваше время и вдаваться в описание ситуации (почему нужно именно это), но вот нужда:

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

Код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#словарь (тут больше 3 пар. Это для простоты)
    stats_info_all_names = {
        'anna_info': 0,
        'kira_info': 0,
        'liza_info': 0,
    }
 
# Функция, которая не работает:
    def change_bool_dict(dic, name, x, y):
 
        for i, k in dic.items():
            if i == name:
                k = x
            else:
                k = y
# У меня словарь [B]dic[/B], и каждый его ключ нужно проверить на соответствие значению переменной [B]name[/B]
# И если оно совпало, то значению только этого ключа присвоить 1, а всем остальным присвоить 0
# Я по всякому пробовал, и с "for key in dic.keys():" - никак не работает. Может всё дело в особенности ренпай, но мне нужно 
# Получить правильный метод перебора с описанной мной логикой, чтобы знать, что приведённый вами пример
# 100% правильный и будет работать. И если уже не сработает, тогда дело в Ренпае.
# Я в отчаянии
 
# Это не важно, но скинул для общей картины, если кто знает Ренпай
screen stats_names():
    frame:
        vbox:
            if anna_meet:
                textbutton '[stats_info_all_names[anna_info]] [stats_info_all_names[kira_info]] [stats_info_all_names[liza_info]]':
                    # Вот в этой строке я вызываю функцию "change_bool_dict" и передаю 4 аргумента, включая словарь
                    action Function(change_bool_dict, stats_info_all_names, kira_info, 1, 0)
Добавлено через 42 минуты
Нашёл решение, но не нашёл, как удалить тему. Админы, удалите, пожалуйста. Более неактуально.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2022, 04:56
Ответы с готовыми решениями:

Превратить первый список в набор ключей словаря, а второй список добавить к каждому ключу словаря в виде списка
Даны два списка с одинаковым количеством элементов. Создать новый словарь. Превратить первый список в набор ключей словаря, а второй список...

Значения по ключу 'add' нужно добавить в изменяемое множество, а значения по ключу 'remove' — убрать из множества
Написать функцию apply_diff(). Эта функция принимает два аргумента, первым из которых выступает множество, которое нужно будет изменять...

Не работает код вызова значения из словаря
В коде ниже не срабатывает код вызова переменной, хотя если прописать отдельно в интерпритатор, то все работает. from time import...

1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
09.07.2022, 05:15
Так?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
names = {
    'anna_info': 0,
    'kira_info': 0,
    'liza_info': 0,
}
 
def change(dic, name, x, y):
    if name in dic:
        for k in dic:
            dic[k] = (y, x)[k==name]
 
change(names, 'kira_info', 1, 0)
print(names)
#{'anna_info': 0, 'kira_info': 1, 'liza_info': 0}
 
change(names, 'liza_info', 1, 0)
print(names)
# {'anna_info': 0, 'kira_info': 0, 'liza_info': 1}
# У меня словарь dic, и каждый его ключ нужно проверить на соответствие значению переменной name
# И если оно совпало, то значению только этого ключа присвоить 1, а всем остальным присвоить 0
Непонятно:
- всегда ли изначально словарь "занулёный", потому что если да, то перебирать все значения не нужно, можно просто установить нужное
- что должно произойти, если "оно не совпало", - нужно ничего не делать или все занулить?

Альтернативно, храните всегда "занулёный" словарь отдельно, и тогда можно будет всегда просто установить одно значение по известному ключу, без перебора
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2022, 05:15
Помогаю со студенческими работами здесь

Сортировка словаря по ключу
Как отсортировать Dictionary <int, Vector3> по ключу, по возрастанию? Метода Sort() для словаря так сходу не нашёл. Надо компаратор...

Сортировка словаря по ЗНАЧЕНИЮ(не по ключу)
Собственно, как это сделать? Вот мой код: import sys from pprint import pprint #iter_count = int(sys.argv) # Помещаем дзен из...

DataBinding к элементу словаря по ключу
Всем привет. На форме есть ListBox и DataGrid. В качестве источника данных для ListBox служит набор ключей из словаря-свойства, описанного...

Получение данных словаря по ключу
Вопрос без кода, при необходимости попробую написать. Есть словарь с данными: "имя", "Вася" "фамилия",...

Сложение всех значений словаря по ключу
Есть словарь Dictionary<string, int>. Элементы в нём типа: Ключ: Цех 1, Значение: 2500 Ключ: Цех 1, Значение: 2300 Ключ: Цех 4,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru