Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101

Обойти и сравнить значения из списка словарей

01.04.2020, 16:54. Показов 3053. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется 2 структуры, которые хранят значения в таком виде:

Python
1
2
3
[{3: ['Hello']}, {6: ['sweet']}] 
 
[{3: ['Hello']}, {6: ['Hello', 'sweet', 'man']}]
Нужно обойти эту структуру и сравнить значения: сравниваем список из ключа 3 (список совпадает, инкрементируем переменную score), потом сравниваем список из ключа 6 - списки разные, ничего не делаем.

Сейчас я делаю это так:

Python
1
2
3
4
5
6
7
8
        user_score = 0
        for u_ans in user_answer_list:
            for r_ans in list_of_questions:
                for ukey in u_ans.keys():
                    for rkey in r_ans.keys():
                        if ukey == rkey and u_ans.get(ukey) == r_ans.get(rkey):
                            user_score += 1
        print(user_score)
Но это реально какой-то говнокод. Может быть есть какой-то красивый способ сделать то же самое?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2020, 16:54
Ответы с готовыми решениями:

Поиск по списку словарей и вывод списка словарей
У меня есть список словарей, например: data= Как мне вывести этот список, чтобы каждый словарь был на каждой отдельной строке,...

Сравнить два списка в python, найти отличающиеся значения
У меня есть 2 переменные, в которых хранятся следующие значения: var1 = }, {2: }, {4: }] var2 = }, {2: }, {4: }] Нужно...

Чтения списка словарей
В JSON файле есть список словарей Читаю построчно как список with open('links.json') as f: data = json.load(f) for d in...

3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.04.2020, 17:10
У тебя структура странная. Вот зачем тебе числовые ключи в словаре?
Если они порядковые и сплошные (от 0 и до N), тогда их роль сыграют обычные индексы в обычном списке.
А чем большую вложенность ты делаешь, тем более ты усложняешь себе жизнь.

P.S. И в следующий раз приводит более понятные примеры.
Что у тебя user_answer_list, а что list_of_questions мы должны догадаться?
0
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
01.04.2020, 17:18  [ТС]
Ключи в теории, одинаковые, если клиентская сторона не накосячит. Но они могут быть любыми. Думаете, стоит их убрать?

PS user_answer_list - первый список, list_of_questions - второй список.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.04.2020, 18:04
До тех пор пока у тебя такая странная структура - от циклов ты не убежишь.
А вот если бы ты создал нормальную SQL таблицу без избыточного дублирования данных - запрос и поиск были бы гораздо проще.

Добавлено через 3 минуты
P.S. И еще: приведенный пример не является достаточным.
Ты показал два дерева, но за ними не видно леса - реальной сложности твоей структуры.
Возможно, она просто неправильно спроектирована.
------------------------------
Ну или можно вот так упростить обход:
Добавлено через 31 минуту
Python
1
2
3
4
5
6
7
8
9
10
from itertools import zip_longest
 
user_score = 0
for (u_ans,r_ans) in zip_longest(
        user_answer_list,
        list_of_questions, fillvalue={}
        ):
    for rkey in r_ans.keys():
        if u_ans.get(rkey) and u_ans.get(rkey) == r_ans.get(rkey):
            user_score += 1
Добавлено через 5 минут
Хотя нет, zip_longest тут не поможет. Словари же в разброс будут располагаться в списках.
Поэтому только так:
Python
1
2
3
4
5
6
user_score = 0
for u_ans in user_answer_list:
    for r_ans in list_of_questions:
        for rkey in r_ans.keys():
            if u_ans.get(rkey) and u_ans.get(rkey) == r_ans.get(rkey):
                user_score += 1
Один цикл был, как мне кажется, лишним.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2020, 18:04
Помогаю со студенческими работами здесь

Сортировка списка словарей по ключу
Всем привет! Помогите решить задачку. Есть список словарей: list_of_elements = Нужно отсортировать его, чтобы...

Сортировка списка состоящего из словарей
Приветствую. Есть список состоящий из словарей: l = Пытаюсь провести сортировку по значению 'number' с помощью следующего кода: ...

Поиск и вывод записи из списка словарей
Здравствуйте, есть задачка найти первую запись из списка словарей по запросу, который сам же является словарем, т.е. есть books = ( ...

Как получить данные из списка словарей
Нужно получить имена водителей из списка словарей, который выглядит примерно так. {'drivers': {'id': {'FirstName': 'Александр1', ...},...

Преобразование списка словарей в словарь списков
Добрый вечер всем! Подкину вам задачку, чтоб мозги не загустели. Имеется список из словарей типа: raw = ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru