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

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

29.08.2020, 18:41. Показов 6934. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
29.08.2020, 19:29
Цитата Сообщение от EldoRada Посмотреть сообщение
пользователь должен получить имя животного по его номеру.
перебираем в цикле словари из документс и если номер равен данному то выводим и прерываем цикл. Все это в отдельной функции

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

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

И ещё момент: функцию лучше задавать прямо с первой задачи или можно сделать всё циклом?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru