Словари (dictionaries) - это изменяемые коллекции, которые хранят пары ключ-значение. Каждый ключ в словаре уникален и используется для доступа к соответствующему значению.
Словари можно создавать несколькими способами:
# Пустой словарь
пустой_словарь = {}
print(пустой_словарь) # Вывод: {}
# Словарь с элементами
возрасты = {"Анна": 25, "Борис": 30, "Виктория": 22}
print(возрасты) # Вывод: {'Анна': 25, 'Борис': 30, 'Виктория': 22}
# Словарь с разными типами ключей и значений
смешанный = {
"имя": "Иван",
42: "ответ на главный вопрос",
True: [1, 2, 3],
(1, 2): "кортеж как ключ"
}
print(смешанный)
# Создание словаря с помощью dict()
словарь = dict(имя="Анна", возраст=25, город="Москва")
print(словарь) # Вывод: {'имя': 'Анна', 'возраст': 25, 'город': 'Москва'}
# Создание словаря из списка кортежей
пары = [("a", 1), ("b", 2), ("c", 3)]
словарь_из_пар = dict(пары)
print(словарь_из_пар) # Вывод: {'a': 1, 'b': 2, 'c': 3}
Элементы словаря доступны по ключу:
# Словарь с информацией о студенте
студент = {
"имя": "Анна",
"возраст": 20,
"курс": "Информатика",
"средний_балл": 4.5
}
# Доступ к элементам по ключу
print(f"Имя: {студент['имя']}") # Вывод: Имя: Анна
print(f"Возраст: {студент['возраст']}") # Вывод: Возраст: 20
# Изменение значения
студент["возраст"] = 21
print(f"Новый возраст: {студент['возраст']}") # Вывод: Новый возраст: 21
# Добавление нового элемента
студент["университет"] = "МГУ"
print(студент)
# Доступ с помощью get() (безопасный доступ)
print(студент.get("имя")) # Вывод: Анна
print(студент.get("фамилия")) # Вывод: None
print(студент.get("фамилия", "Не указано")) # Вывод: Не указано
Словари имеют множество полезных методов:
# Исходный словарь
студент = {
"имя": "Анна",
"возраст": 20,
"курс": "Информатика"
}
print(f"Исходный словарь: {студент}")
# keys() - получение всех ключей
print(f"Ключи: {list(студент.keys())}")
# values() - получение всех значений
print(f"Значения: {list(студент.values())}")
# items() - получение всех пар ключ-значение
print(f"Пары: {list(студент.items())}")
# update() - обновление словаря
студент.update({"средний_балл": 4.5, "университет": "МГУ"})
print(f"После update(): {студент}")
# pop() - удаление и возврат значения по ключу
возраст = студент.pop("возраст")
print(f"Удаленный возраст: {возраст}")
print(f"После pop(): {студент}")
# popitem() - удаление и возврат последней пары (в Python >= 3.7)
последняя_пара = студент.popitem()
print(f"Удаленная пара: {последняя_пара}")
print(f"После popitem(): {студент}")
# Словарь
студент = {
"имя": "Анна",
"возраст": 20,
"курс": "Информатика"
}
# setdefault() - установка значения по умолчанию
специальность = студент.setdefault("специальность", "Не указана")
print(f"Специальность: {специальность}")
print(f"Словарь: {студент}")
# clear() - очистка словаря
# студент.clear()
# print(f"После clear(): {студент}")
# copy() - создание копии словаря
копия = студент.copy()
print(f"Копия: {копия}")
# Проверка наличия ключа
if "имя" in студент:
print(f"Имя студента: {студент['имя']}")
if "фамилия" not in студент:
print("Фамилия не указана")
Существует несколько способов перебора элементов словаря:
# Словарь с оценками
оценки = {
"Анна": 5,
"Борис": 4,
"Виктория": 5,
"Дмитрий": 3
}
# Перебор ключей (по умолчанию)
print("Студенты:")
for студент in оценки:
print(f"- {студент}")
# Перебор ключей с помощью keys()
print("\nСтуденты (с keys()):")
for студент in оценки.keys():
print(f"- {студент}")
# Перебор значений
print("\nОценки:")
for оценка in оценки.values():
print(f"- {оценка}")
# Перебор пар ключ-значение
print("\nСтуденты и их оценки:")
for студент, оценка in оценки.items():
print(f"- {студент}: {оценка}")
Словари могут содержать другие словари в качестве значений:
# Словарь с информацией о студентах
студенты = {
"Анна": {
"возраст": 20,
"курс": "Информатика",
"оценки": [5, 4, 5, 5]
},
"Борис": {
"возраст": 22,
"курс": "Математика",
"оценки": [4, 4, 3, 4]
},
"Виктория": {
"возраст": 19,
"курс": "Физика",
"оценки": [5, 5, 5, 4]
}
}
# Доступ к вложенным элементам
print(f"Курс Анны: {студенты['Анна']['курс']}")
print(f"Средний балл Бориса: {sum(студенты['Борис']['оценки']) / len(студенты['Борис']['оценки'])}")
# Перебор вложенных словарей
print("\nИнформация о студентах:")
for имя, информация in студенты.items():
print(f"\n{имя}:")
for ключ, значение in информация.items():
if ключ == "оценки":
print(f" {ключ}: {значение} (средний балл: {sum(значение)/len(значение):.2f})")
else:
print(f" {ключ}: {значение}")
Словарные включения - это компактный способ создания словарей:
# Создание словаря квадратов чисел
# Обычный способ
квадраты = {}
for i in range(1, 6):
квадраты[i] = i ** 2
print(квадраты)
# Словарное включение
квадраты = {i: i ** 2 for i in range(1, 6)}
print(квадраты)
# Словарное включение с условием
четные_квадраты = {i: i ** 2 for i in range(1, 11) if i % 2 == 0}
print(четные_квадраты)
# Создание словаря из двух списков
ключи = ["a", "b", "c"]
значения = [1, 2, 3]
словарь = {ключ: значение for ключ, значение in zip(ключи, значения)}
print(словарь)
# Преобразование строк в словаре
слова = ["привет", "мир", "python"]
длины = {слово: len(слово) for слово in слова}
print(длины)
Задание 1:
# Словарь стран и столиц
страны = {
"Россия": "Москва",
"Франция": "Париж",
"Германия": "Берлин"
}
# Добавление новых стран
страны.update({
"Италия": "Рим",
"Япония": "Токио",
"Канада": "Оттава"
})
# Вывод всех пар
print("Страны и их столицы:")
for страна, столица in страны.items():
print(f"{страна}: {столица}")
Задание 2:
def частота_букв(строка):
частота = {}
for символ in строка.lower():
if символ.isalpha(): # Учитываем только буквы
частота[символ] = частота.get(символ, 0) + 1
return частота
# Тестирование
текст = "Программирование на Python"
результат = частота_букв(текст)
print(f"Частота букв в '{текст}':")
for буква, количество in sorted(результат.items()):
print(f"{буква}: {количество}")
Задание 3:
# Словарь товаров
товары = {
"яблоки": {"цена": 50, "количество": 10},
"бананы": {"цена": 30, "количество": 5},
"груши": {"цена": 60, "количество": 8}
}
def общая_стоимость(товары_словарь):
общая_сумма = 0
for товар, информация in товары_словарь.items():
стоимость = информация["цена"] * информация["количество"]
общая_сумма += стоимость
print(f"{товар}: {стоимость} руб.")
return общая_сумма
# Тестирование
print("Стоимость товаров:")
итого = общая_стоимость(товары)
print(f"Итого: {итого} руб.")
Задание 4:
def объединить_словари(словарь1, словарь2):
результат = словарь1.copy()
for ключ, значение in словарь2.items():
if ключ in результат:
результат[ключ] += значение
else:
результат[ключ] = значение
return результат
# Тестирование
словарь_a = {"a": 1, "b": 2, "c": 3}
словарь_b = {"b": 3, "c": 4, "d": 5}
объединенный = объединить_словари(словарь_a, словарь_b)
print(f"Словарь A: {словарь_a}")
print(f"Словарь B: {словарь_b}")
print(f"Объединенный: {объединенный}")