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

Работа с вложенными словарями

29.08.2020, 18:41. Показов 6975. Ответов 6

Студворк — интернет-сервис помощи студентам
Господа, добрый вечер! У меня есть два блока исходных данных:

Python
1
2
3
4
5
6
7
8
9
10
11
documents = [
{'type': 'bird', 'number': '22', 'name': 'Кики'},
{'type': 'dog', 'number': '1', 'name': 'Шарик'},
{'type': 'cat', 'number': '13', 'name': 'Маруся'}
]
 
directories = {
'1': ['22', '1'],
'2': ['13'],
'3': []
}
Задача 1. После ввода команды “p” пользователь должен получить имя животного по его номеру.
Задача 2. После ввода команды “s” пользователь по номеру документа должен узнать, на какой полке он хранится
Задача 3. После ввода команды “l” пользователь должен увидеть полную информацию по всем документам: комер, тип, имя и на какой полке хранится.

Я затормозила уже на первой задаче. Использовала цикл for и пыталась вывести значения по ключам. Но максимум, что получила - имя первого животного в ответ на любой введённый номер.

Помогите, чем можете Можно вводить функции. Только не делайте плиз длиннющие однострочные циклы - мне важно понять принцип алгоритма. Ибо в теории я всё понимаю, а как дело касается практики - дико торможу.

Спасибо заранее!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2020, 18:41
Ответы с готовыми решениями:

Работа со словарями, операции над словарями, методы работы со словарями в Python 3
Создать список НАЗВАНИЕ ЛЮБОЕ (тип: list) и заполнить его СОДЕРЖИМОЕ ЛЮБОЕ (элементы списка – строки). На основе созданного списка...

Работа со словарями, операции над словарями, методы работы со словарями на Python
Создать список НАЗВАНИЕ ЛЮБОЕ (тип: list) и заполнить его СОДЕРЖИМОЕ ЛЮБОЕ (элементы списка – строки). На основе созданного списка...

Как работать с вложенными словарями
Добрый день. Я получил данные по API и теперь пытаюсь понять как их представить в обычной таблице (для заливки в SQL и других отчетах) ...

6
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
29.08.2020, 19:29
Цитата Сообщение от EldoRada Посмотреть сообщение
пользователь должен получить имя животного по его номеру.
перебираем в цикле словари из документс и если номер равен данному то выводим и прерываем цикл. Все это в отдельной функции

про полки не понял, если надо по ключу из директории получить всех животных то
получаем номер (ключ в директориях) достаем список значений, проходим по ним циклом используя функцию которую написали выше (получение по номеру)
1
0 / 0 / 0
Регистрация: 29.08.2020
Сообщений: 3
29.08.2020, 19:53  [ТС]
Под полками подразумевались директории.

Проблема в том, что логика мне относительно ясна. Но я пишу код - и всё равно не получаю нужный результат. Максимум - получаю по номеру имя животного, но какой бы номер не вводила - животное одно и то же, первое в списке. И я не понимаю, чего я указываю не так.

И ещё момент: функцию лучше задавать прямо с первой задачи или можно сделать всё циклом?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
29.08.2020, 20:05
Цитата Сообщение от EldoRada Посмотреть сообщение
Но я пишу код
код -в студию! поможем
1
16 / 14 / 4
Регистрация: 05.06.2019
Сообщений: 79
30.08.2020, 00:13
Я так понимаю, что вы хотите по номеру животного вернуть полку (то есть ключ этого словаря)?

Цитата Сообщение от EldoRada Посмотреть сообщение
directories = {
'1': ['22', '1'],
'2': ['13'],
'3': []
}
Цитата Сообщение от EldoRada Посмотреть сообщение
по номеру документа должен узнать, на какой полке он хранится
Если так, то словари предназначены для вывода значения по ключу, но не наоборот.
Я - новичок, как и вы, поэтому на истину не претендую, но либо нужно изменять словарь, цитируемый выше, либо использовать "костыли" (хотя в интернете много решений этого рода проблем, но все они объемны по написанию кода)

Конкретно с вашим примером работает этот код (как один, далеко не самый лучший вариант), но подумайте над организацией данных в словарях.


Python
1
2
3
4
    def documentation(self):
        for i in range(len(self.directories)):
            if repr(self.animalNumber) in self.directories[repr(i + 1)]:
                return repr(i + 1)
P.s: если вы опытный программист и читаете это - как бы вы реализовали код? Может для этого есть встроенная функция или что-то вроде?

Добавлено через 6 минут
переменная animalNumber объявляется в другом фрагменте и соответсвует ключу 'number' в словаре documents
0
0 / 0 / 0
Регистрация: 29.08.2020
Сообщений: 3
30.08.2020, 07:02  [ТС]
Господа, спасибо за подсказки. Я вроде нашла решение (не без подсказки), но оно с помощью условий и функции filter и lambda. Поняла, как использовать цикл, но получается длиннее. Сейчас код получается коротким, читабельным. Но теперь возникает другая проблема: это задание - по теме функции. А я не понимаю, зачем вообще сюда функцию вставлять, если можно сделать всё коротко и условиями. Уточню: дополнительно - ещё две задачи к тем же исходным данным: по определённой команде добавить новую директорию и удалить директорию.

То есть если взять пять этих задач вместе, какую общую функцию можно сделать, чтобы упростить код?

Пример кода для решения первой задачи:

Python
1
2
3
4
5
p = input('Введите команду: ')
if p == 'p':
    num = input('Введите номер животного: ')
    animal = list(filter(lambda e: e['number'] == num, documents))[0]
    print(animal['name'])
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
30.08.2020, 09:03
EldoRada, так у тебя же не одно задание, а 3 и в последних можно использовать функцию из первого
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2020, 09:03
Помогаю со студенческими работами здесь

Цикл со списком с вложенными словарями. Не работает срез части списка
prodavec_1={"имя":"маша","место работы":"московская"} for x in range(10):#Создание списка из 10 вложенных одинаковых словарей ...

Работа со словарями
Пусть список студентов представлен в виде структуры ,,]. Преобразуйте список в словарь вида: {№: , №:, №:} Выведите информацию о...

Работа со словарями
Напишите функцию dict_sum. Функция принимает на вход словарь, где значениями являются списки. Она должна заменить списки их суммами и...

Работа со словарями
Подскажите пожалуйста, как в имеющемся коде, добавить вывод данных о проценте и качестве успеваемости в классе за год, составить списки...

Работа со словарями
Добрый день, хотел создать словарь, примерно такой: clans= {'Infinitywars':'#8VYQUC'} : Задумка в том, что есть словарь clans,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru