Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 19.11.2017
Сообщений: 17

Объясните как это работает

22.03.2018, 14:54. Показов 920. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбирал чужие решения задачи на словари и возникли затруднения с пониманием пары строк.
Вот задача:
Условие
Дана база данных о продажах некоторого интернет-магазина. Каждая строка входного файла представляет собой запись вида Покупатель товар количество, где Покупатель — имя покупателя (строка без пробелов), товар — название товара (строка без пробелов), количество — количество приобретенных единиц товара.

Создайте список всех покупателей, а для каждого покупателя подсчитайте количество приобретенных им единиц каждого вида товаров. Список покупателей, а также список товаров для каждого покупателя нужно выводить в лексикографическом порядке.
Код(не весь, вывода нет):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
a = {}
k = []
while True:
    try:
        s = input().split()
        k = s[0]
        p = s[1]
        l = int(s[2])
        if k in a:
            a[k][p] = a[k].get(p, 0) + l
        else:
            a[k] = {p:l}
    except:
        break
Затруднения вызвала вот эта строчка" a[k][p] = a[k].get(p, 0) + l". Как я понял он сначала проверяет есть ли такой элемент в словаре, если нет, то создает словарь в словаре. Иначе он добавляет новые значений, вот только не могу понять как.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2018, 14:54
Ответы с готовыми решениями:

Объясните пожалуйста как работает программа
вычисление канонических чисел def primefactors( n ): result = str(n) + ' = 1' p = 2 while n > 1: if ( n % p ) == 0: ...

Объясните, как работает пример из книги
Помогите разобраться, почему функция maker работает... Она же не передаёт (по крайней мере явно) функции action никаких данных, но она все...

Объясните как это работает
Объясните как это работает

1
 Аватар для clipper1995
12 / 12 / 9
Регистрация: 19.03.2018
Сообщений: 48
22.03.2018, 15:47
В данном решении a[k][p] = a[k].get(p, 0) + l равносильно записи a[k][p] = a[k][p] + l
(get с дефолтом ноль не имеет смысла, так как добавляется элемент строкой a[k] = {p:l}, и там всегда что-то есть)
Почитайте про метод get словаря.
Тут просто в словаре содержится словарь. Обращение к элементам вложенного словаря так и делается; a[x][y]
Если будет еще один уровень вложенности, то будет a[x][y][z]...

Чтобы понять, запустите код ниже. Два последних print выводят один и тот же ключ по-разному, с прямым обращением по индексу, и с методом get

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a = {}
b = {}
c = {}
s = {}
 
a["key1 a"] = "value1 in a"
a["key2 a"] = "value2 in a"
a["key3 a"] = "value3 in a"
b["key1 b"] = "value1 in b"
b["key2 b"] = "value2 in b"
b["key3 b"] = "value3 in b"
c["key1 c"] = "value1 in c"
c["key2 c"] = "value2 in c"
c["key3 c"] = "value3 in c"
 
s["slovar a"] = a
s["slovar b"] = b
s["slovar c"] = c
 
for key in s:
    print(key, s[key])
print("-------------------")
for key in s:
    print(s[key].get("key2 c", "tut nety"))
print("-------------------")
for key in s:
    if "key2 c" in s[key]:
        print(s[key]["key2 c"])
    else:
        print("tut nety")
Добавлено через 9 минут
"Как я понял он сначала проверяет есть ли такой элемент в словаре, если нет, то создает словарь в словаре. Иначе он добавляет новые значений, вот только не могу понять как."

Надеюсь, понятно, что проверяет есть ли такой элемент в словаре строка if k in a:
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2018, 15:47
Помогаю со студенческими работами здесь

Объясните пожалуйста как это работает
s = input().split() n = 0 for i in range(len(s)):     if s.isdigit():         n += int(s) print(n)

Пожалуйста, объясните как это)
Напишите вариант предыдущей программы, в котором в качестве стека используется символьная строка def is_balanced(text,...

Пожалуйста, объясните как это дополнить
Дополните предыдущую программу так, чтобы она определяла номер ошибочного символа в строке. Напишите вариант предыдущей программы, в...

Объясните как работает код
Вот код я не знаю как работает объясните пожалуйста def animate(): for c in itertools.cycle(): if done: ...

Объясните как работает if в цикле while
Добрый день. Мне не совсем понятно как работает строка кода где инструкция if, а именно почему почему срабатывает continue, если поставить...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru