Следующая тема: БРу. Библиотека Pandas

Вернуться в раздел: Базовый Python

Вернуться в оглавление: Я.Практикум

8. Словари.

 8.1 Введение

 8.2 Словари - основы

 8.3 Поиск и добавление элементов

Задание 1

Запишите в переменную walmart_price стоимость акции 'Walmart'. Для этого извлеките значение из словаря небезопасным способом.

financial_info = {
    'American Express': 93.23,
    'Boeing': 178.44,
    'Coca-Cola': 45.15,
    'Nike': 97.99,
    'JPMorgan':96.27,
    'Walmart': 130.68,
    'Walt Disney': 119.34
}

walmart_price = financial_info['Walmart'] # напишите ваш код здесь
print(walmart_price)

Задание 2 Извлеките из словаря цену акций 'Nike' безопасным способом. В случае, если ключа нет, метод должен вернуть None.

financial_info = {
    'American Express': 93.23,
    'Boeing': 178.44,
    'Coca-Cola': 45.15,
    'Nike': 97.99,
    'JPMorgan': 96.27,
    'Walmart': 130.68,
    'Walt Disney': 119.34
}

nike_price = financial_info.get('Nike') # напишите ваш код здесь
print(nike_price)

Задание 3

Добавьте в словарь financial_info новый элемент c ключом 'Microsoft' и значением — 208.35.

financial_info = {
    'American Express': 93.23,
    'Boeing': 178.44,
    'Coca-Cola': 45.15,
    'Nike': 97.99,
    'JPMorgan': 96.27,
    'Walmart': 130.68,
    'Walt Disney': 119.34
}

# добавьте новую пару здесь
financial_info ['Microsoft'] = 208.35
print(financial_info)

 8.4 Словари и списки

 8.5 Список словарей

Задание 1

В списке словарей monuments описаны некоторые статуи. Выведите на экран их среднюю высоту. В решении должны быть использованы цикл и вызов функции len(). В цикле посчитайте только сумму высот всех статуй. А среднее значение рассчитайте и выведите на экран уже после цикла.

monuments = [
    {
        'name': 'Статуя Единства', # название
        'country': 'Индия', # страна
        'height': 182 # высота без постамента
    },
    {
        'name': 'Статуя богини Каннон в Сендае',
        'country': 'Япония',
        'height': 100
    },
    {
        'name': 'Родина-Мать зовёт!',
        'country': 'Россия',
        'height': 85
    },
    {
        'name': 'Будда Дорденма',
        'country': 'Бутан',
        'height': 51.5
    },
    {
        'name': 'Статуя Свободы',
        'country': 'США',
        'height': 46
    }
]

# напишите ваш код здесь
H = 0
for item in monuments:
    H += item['height']
    
print(H/len(monuments))

Задание 2

Исследуйте список order из урока: найдите общую стоимость всех пицц. Результат выведите на экран.

order = [
    {
        'item': 'Пицца Маргарита', # название позиции
        'category': 'пицца', # категория товара
        'quantity': 2, # количество в заказе
        'comment': 'Побольше сыра, пожалуйста!', # комментарий к заказу
        'price': 320 # стоимость одной единицы товара
    },
    {
        'item': 'Пицца с ветчиной',
        'category': 'пицца',
        'quantity': 1,
        'comment': '',
        'price': 410
    },
    {
        'item': 'Pepsi 1 л',
        'category': 'напитки',
        'quantity': 3,
        'comment': '',
        'price': 75
    },
    {
        'item': 'Сок яблочный 0.5 л',
        'category': 'напитки',
        'quantity': 1,
        'comment': '',
        'price': 80
    },
    {
        'item': 'Круассан с сыром',
        'category': 'выпечка',
        'quantity': 2,
        'comment': '',
        'price': 130
    }
]

# напишите ваш код здесь
sum_pica = 0
for item in order:
    if item['category'] == 'пицца':
        sum_pica += item['price'] * item['quantity']
print (sum_pica)

 8.6 Лаборатория словарей

Задача №1

В словаре arts_info ключи — названия картин, а значения — их авторы. Выведите на экран: Автора картины «Крик» — небезопасным способом. Автора картины «Рожь» — безопасным способом. Значением по умолчанию сделайте -1.

arts_info = {
    'Звёздная ночь': 'Ван Гог Винсент',
    'Крик': 'Мунк Эдвард',
    'Неизвестная': 'Крамской Иван',
    'Итальянский полдень': 'Брюллов Карл',
    'Рожь': 'Шишкин Иван',
}

print(arts_info['Крик']) # допишите ваш код внутри print()
print(arts_info.get('Рожь', -1)) # допишите ваш код внутри print()

Задача №2

Три игрока лиги NBA считали заработанные очки в течение трёх лет. Результат сохранён в словаре списков nba_players. Создайте цикл, который: Пройдётся по элементам словаря методом items() и сложит очки каждого игрока с помощью функции sum(). Получит длину списка функцией len(). Выведет на экран имя игрока и среднее значение очков. Получить его можно, разделив суммы очков на длину списка. Например, для Леброна Джеймса цикл напечатает:

nba_players = {
    'Джеймс Харден': [2191, 2818, 2335],
    'Леброн Джеймс': [2251, 1505, 1698],
    'Дэмиан Лиллард': [1962, 2067, 2009],
}

# напишите ваш код здесь
for playrs,nba in nba_players.items():
    print (playrs, int(sum(nba)/len(nba)))

Задача №3

Список словарей tracklist содержит плейлист для вечеринки. Найдите суммарную длительность треков жанра Hip-Hop с помощью цикла.

tracklist = [
    {
        'title': 'Stronger', # название трека
        'artist': 'Saimoo', # исполнитель
        'duration': 145, # продолжительность (в секундах)
        'genre': 'Deep House', # жанр
    },
    {
        'title': 'Alors On Danse',
        'artist': 'Stromae',
        'duration': 205,
        'genre': 'Hip-Hop',
    },
    {
        'title': 'Don\'t Be So Shy',
        'artist': 'Imany (Filatov & Karas Remix)',
        'duration': 190,
        'genre': 'Deep House',
    },
    {
        'title': 'Off My Mind',
        'artist': 'Matvey Emerson',
        'duration': 130,
        'genre': 'Deep House',
    },
    {
        'title': 'Now You\'re Gone',
        'artist': 'Basshunter',
        'duration': 154,
        'genre': 'Eurodance',
    },
    {
        'title': 'It Was A Good Day',
        'artist': 'Ice Cube',
        'duration': 260,
        'genre': 'Hip-Hop',
    },
    {
        'title': 'Diva',
        'artist': 'Beyonce',
        'duration': 200,
        'genre': 'Hip-Hop',
    }
]

hip_hop_duration = 0

# напишите ваш код здесь
for track  in tracklist:
    if track['genre'] == 'Hip-Hop':
        hip_hop_duration += track['duration']
    
print(hip_hop_duration)

Задача №4

Для того же списка словарей tracklist создайте отфильтрованный список словарей deep_house_tracklist, содержащий информацию только о треках с жанром Deep House. Не создавайте этот список вручную.

from json import dumps

tracklist = [
    {
        'title': 'Stronger',
        'artist': 'Saimoo',
        'duration': 145,
        'genre': 'Deep House',
    },
    {
        'title': 'Alors On Danse',
        'artist': 'Stromae',
        'duration': 205,
        'genre': 'Hip-Hop',
    },
    {
        'title': 'Don\'t Be So Shy',
        'artist': 'Imany (Filatov & Karas Remix)',
        'duration': 190,
        'genre': 'Deep House',
    },
    {
        'title': 'Off My Mind',
        'artist': 'Matvey Emerson',
        'duration': 130,
        'genre': 'Deep House',
    },
    {
        'title': 'Now You\'re Gone',
        'artist': 'Basshunter',
        'duration': 154,
        'genre': 'Eurodance',
    },
    {
        'title': 'It Was A Good Day',
        'artist': 'Ice Cube',
        'duration': 260,
        'genre': 'Hip-Hop',
    },
    {
        'title': 'Diva',
        'artist': 'Beyonce',
        'duration': 200,
        'genre': 'Hip-Hop',
    }
]

deep_house_tracklist = []

# напишите ваш код здесь
for track in tracklist:
    if track['genre'] == 'Deep House':
        deep_house_tracklist.append(track)

for track in deep_house_tracklist:
    print(dumps(track, indent=4))

 8.7 Заключение

Поздравляем, вы прошли большой путь и изучили основы языка Python. Не забудьте шпаргалку по словарям, чтобы ничего не упустить. Словари — важная структура данных. Эта тема полезна для понимания таблиц в библиотеке pandas, без которой не обходится работа специалиста в сфере данных. С этой библиотекой вы познакомитесь в следующей теме. Вы уже многому научились, и теперь нужно систематизировать полученные знания. В этом вам поможет карта — скачайте концепт-карту по пройденным урокам и проверьте, насколько хорошо вам знакомы все понятия.

ШпораКонцепт карта:

 8.8 Проверочные задания. Словари

Словари Чтобы пройти тест нужно правильно ответить на 5 вопросов из 10. Время на прохождение: 10 минут

Задание 1 из 10
Какая структура данных хранит элементы в виде пар «ключ — значение»?

Правильный ответ Словарь

В обычном англо-русском словаре по слову “dictionary” вы найдёте его русский перевод — «словарь». Так же и в словарях Python: по ключевому слову можно найти связанное с ним значение.

Задание 2 из 10

Какое значение выдаст код? movies = { 'Побег из Шоушенка': 1994, 'Крёстный отец': 1972, 'Тёмный рыцарь': 2008, 'Список Шиндлера': 1993 } print(len(movies))

Правильный ответ 4

Функция len() считает число элементов. У строк это символы, у списков — элементы списка, ими могут быть строки, числа и т. д. Элемент словаря — пара ключ:значение. В словаре movies таких пар 4. Это значение и выдаст функция len().

Задание 3 из 10

Какой код добавит новый элемент в словарь? books = { 'Дж. Оруэлл': '1984', 'Лев Толстой': 'Война и мир', 'Ральф Эллисон': 'Человек-невидимка', 'Антуан де Сент-Экзюпери': 'Маленький принц' }

Правильный ответ books['Эрнест Хемингуэй'] = 'Прощай, оружие!'

 Добавить новое значение в словарь просто — не понадобятся даже специальные методы. Новый ключ указывают в квадратных скобках и с помощью оператора = присваивают ему значение.

Задание 4 из 10

Из словаря info нужно извлечь значение по ключу city. Выберите безопасный способ, который точно не приведёт к ошибке.

Правильный ответ city_info = info.get('city') print(city_info)

Код info['city'] сработает, если в словаре будет такой ключ. Иначе придётся отлавливать ошибки с помощью try...except. Лучше использовать специальный метод get() — так лаконичнее. Вместо ошибки он выдаст None или любое другое значение, которое вы зададите.

Задание 5 из 10

Какое значение выведет код? items = { 'Пицца Маргарита': 3, 'Сок апельсиновый': 2, 'Картофель фри стандартный': 5 }

item = items.get('Пицца') print(item)

Правильный ответ None

Метод get() проверит, встречается ли такой ключ в словаре, и выдаст его значение. Но передать ключ нужно целиком — 'Пицца Маргарита'. Если передать только часть, метод значения не найдёт и выдаст None.

Задание 6 из 10

Какой результат выдаст код? books = { 'Дж. Оруэлл': '1984', 'Лев Толстой': 'Война и мир', 'Ральф Эллисон': 'Человек-невидимка', 'Антуан де Сент-Экзюпери': 'Маленький принц' }

Правильный ответ Ошибку

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

Задание 7 из 10

Какой результат выдаст код? books = { 'Дж. Оруэлл': '1984', 'Лев Толстой': 'Война и мир', 'Ральф Эллисон': 'Человек-невидимка', 'Антуан де Сент-Экзюпери': 'Маленький принц' }

Правильный ответ Дж. Оруэлл Лев Толстой Ральф Эллисон Антуан де Сент-Экзюпери

В этом случае можно обойтись и без метода items(). С перебором ключей справится цикл for с одним итератором. Но перебрать значения так не получится.

Задание 8 из 10

Что выдаст код? books = { 'Дж. Оруэлл': '1984', 'Лев Толстой': 'Война и мир', 'Ральф Эллисон': 'Человек-невидимка', 'Антуан де Сент-Экзюпери': 'Маленький принц' }

Правильный ответ Дж. Оруэлл 1984 Лев Толстой Война и мир Ральф Эллисон Человек-невидимка Антуан де Сент-Экзюпери Маленький принц

Метод items() поможет перебрать ключи и значения. Не забудьте, что в таком цикле два итератора.

Задание 9 из 10 Какой код найдёт общее количество страниц в книгах? books = [ { 'author': 'Дж. Оруэлл', 'book': '1984', 'page_count': 328 }, { 'author': 'Лев Толстой', 'book': 'Война и мир', 'page_count': 1225 }, { 'author': 'Ральф Эллисон', 'book': 'Человек-невидимка', 'page_count': 624 }, { 'author': 'Антуан де Сент-Экзюпери', 'book': 'Маленький принц', 'page_count': 96 } ]

Правильный ответ total_page_count = 0

Конструкцию со счётчиком вы встречали часто. Для списка словарей такая конструкция тоже подойдёт. Словари упорядочены в списке, поэтому их легко перебрать в цикле for. Для вызова значения из словаря индекс не нужен. Количество страниц можно вызвать по ключу 'page_count'. В этом преимущество списка словарей — удобно вызывать элементы и перебирать данные.

Задание 10 из 10

Какой метод добавит отступы и позволит красиво вывести словарь?

Правильный ответ json.dumps()

json.load()

С этой задачей справится метод json.dumps(). Отступ настраивают с помощью параметра indent. Если указать аргумент ensure_ascii=False, можно обработать кириллические символы.

Следующая тема: БРу. Библиотека Pandas

Вернуться в раздел: Базовый Python

Вернуться в оглавление: Я.Практикум