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

Поиск и вывод записи из списка словарей

02.04.2021, 11:52. Показов 1873. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть задачка найти первую запись из списка словарей по запросу, который сам же является словарем, т.е. есть
Python
1
2
3
4
5
books = (
    {Title: 'Book of Fooos', Author: 'Foo', Date: 1431},
    {Title: 'Happy Foo', Author: 'FooBar', Date: 933},
    {Title: 'Still foooing', Author:: 'FooBar', Date: 933},
)
и запрос, например,
Python
1
target = {Author: 'FooBar', Year: 933}
Результатом которого должно быть
Python
1
    {Title: 'Happy Foo', Author: 'FooBar', Date: 933}
Я хотел сначала добавить все подходящие элементы в список и вывести первый элемент, но что-то дальше вот этого не двигается(оно не работает как нужно)

Python
1
2
3
4
5
def find_book(source, target):
    for book in books:
        for item, value in target.items():
            if book[item] == value:
                res.append(book)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2021, 11:52
Ответы с готовыми решениями:

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

Поиск элемента обычного списка данных и вывод отдельной части списка по соответствию этому элементы
Нужна срочно помощь. Сдавать после завтра нужно. Задание: Найти клиентов по заданным номерам заказов и способов оплаты через...

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

7
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
02.04.2021, 11:57
Цитата Сообщение от Orkimed Посмотреть сообщение
Здравствуйте, есть задачка найти первую запись из списка словарей по запросу, который сам же является словарем, т.е. есть
1) Идешь по кортежу;
2) Смотришь по ключам совпадение соотвествующих значений;
2.1) Если совпадают, то выводишь;
3) Profit!
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 59
02.04.2021, 12:00  [ТС]
Arsegg, я это и пытаюсь делать
Мой код идет по списку и проверяет, но он не работает должным образом и я не понимаю как это исправить.
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
02.04.2021, 12:12
Orkimed,
Python
1
2
3
for elem in books:
    if not (set(target.values()) - set(elem.values())):
        print(elem)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
02.04.2021, 12:41
Orkimed, Раз у Вашей функции есть параметр source, то он должен как-то использоваться в теле функции. Иначе он не имеет смысла. Как я понимаю, Вы предполагали с помощью source передавать в функцию books, но вместо этого в теле функции стали на прямую обращаться к кортежу books (который Вы называете списком). При таком подходе Вы сужаете область применения Вашей функции. Ее уже нельзя будет использовать для других списков или кортежей, которые будут иметь другие имена. Так не делают, то есть без необходимости не сужают область применения функции.
Также в этой функции Вы не возвращаете никакого значения (так как нет return), и пытаетесь занести результат в список res. Но что бы это сделать нужно перед применением метода append, предварительно создать этот список вне функции. Но при этом нужно понимать, что при таком подходе результаты поиска будут накапливаться в списке res. И еще, в этом случае результаты работы функции будут привязаны к этому списку res и в другом месте Вы уже этот результат получить не сможете.
Если Вы хотите, что бы функция была более универсальной, нужно использовать return.
И Ваш код написан не полностью. Где у Вас вызов функции с заданием аргументов?
Это несколько замечаний, которые бросились в глаза, подробнее я не вникал.
Сначала исправте это, что бы можно было тестировать Ваш код.
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 59
02.04.2021, 12:42  [ТС]
Gdez,
Спасибо большое, но пока ждал решил вот таким не очень оптимальным образом
Python
1
2
3
4
for book in books:
        merged = {**book, **target}
        if merged == book:
            return book
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
02.04.2021, 12:44
Orkimed, Но если Вам функция не нужна, то используйте вариант предложенный Gdez. Но все равно мои замечания советую принять к сведению, что бы учиться писать функции.
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 59
02.04.2021, 12:46  [ТС]
Viktorrus, естественно это все обернуто в вызов функции.
Список там создавался, но когда копировал код забыл дописать.
Данные передаются со стороны тестов, поэтому никакие аргументы создавать не нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2021, 12:46
Помогаю со студенческими работами здесь

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

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

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

Получить один элемент из списка словарей
Подскажите пожалуйста, как реализовать: Есть json ответ вида Хочется иметь возможность удобно обращаться к словарям - т.е. указать...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru