0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 59

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

02.04.2021, 11:52. Показов 1880. Ответов 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
8850 / 4501 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru