Тема: Типы данных • Урок 6 из 7
Словари (dictionaries) — это неупорядоченные коллекции, которые хранят пары "ключ-значение". Они позволяют быстро получать, добавлять и изменять данные по ключу, что делает их очень эффективными для хранения и обработки структурированной информации.
Словари в Python создаются с помощью фигурных скобок {} или функции dict():
# Пустой словарь
empty_dict = {}
empty_dict2 = dict()
# Словарь с элементами
person = {
"name": "Иван",
"age": 30,
"city": "Москва"
}
# Создание словаря с помощью функции dict()
person2 = dict(name="Иван", age=30, city="Москва")
# Создание словаря из списка кортежей
items = [("name", "Иван"), ("age", 30), ("city", "Москва")]
person3 = dict(items)Доступ к значениям в словаре осуществляется по ключу:
# Создаем словарь
person = {
"name": "Иван",
"age": 30,
"city": "Москва"
}
print(person)
# Доступ по ключу
print(f"Имя: {person['name']}")
print(f"Возраст: {person['age']}")
# Добавление нового элемента
person["email"] = "ivan@example.com"
print(person)
# Изменение значения
person["age"] = 31
print(person)
# Удаление элемента
del person["city"]
print(person)Python предоставляет множество полезных методов для работы со словарями:
person = {
"name": "Иван",
"age": 30,
"city": "Москва"
}
# Получение всех ключей
keys = person.keys()
print(keys) # dict_keys(['name', 'age', 'city'])
# Получение всех значений
values = person.values()
print(values) # dict_values(['Иван', 30, 'Москва'])
# Получение всех пар ключ-значение
items = person.items()
print(items) # dict_items([('name', 'Иван'), ('age', 30), ('city', 'Москва')])
# Получение значения с проверкой наличия ключа
name = person.get("name") # "Иван"
phone = person.get("phone") # None
phone = person.get("phone", "Не указан") # "Не указан" (значение по умолчанию)
# Удаление и возврат элемента
city = person.pop("city") # "Москва"
# Удаление и возврат произвольной пары ключ-значение
item = person.popitem() # ('age', 30)
# Обновление словаря
person.update({
"age": 31,
"city": "Санкт-Петербург",
"phone": "+7 123 456 7890"
})
# Очистка словаря
person.clear()Для проверки наличия ключа в словаре используется оператор in:
person = {
"name": "Иван",
"age": 30,
"city": "Москва"
}
if "name" in person:
print(f"Имя: {person['name']}")
if "phone" not in person:
print("Телефон не указан")Словари могут содержать другие словари в качестве значений, что позволяет создавать сложные структуры данных:
# Вложенные словари
user = {
"name": "Иван",
"age": 30,
"address": {
"city": "Москва",
"street": "Ленина",
"house": 10
},
"contacts": {
"email": "ivan@example.com",
"phone": "+7 123 456 7890"
}
}
# Доступ к вложенным элементам
city = user["address"]["city"] # "Москва"
email = user["contacts"]["email"] # "ivan@example.com"Аналогично списочным включениям, Python поддерживает словарные включения для компактного создания словарей:
# Создание словаря квадратов чисел
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# С условием
even_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
# Преобразование списка кортежей в словарь
items = [("apple", 5), ("banana", 3), ("orange", 2)]
fruit_count = {fruit: count for fruit, count in items}
print(fruit_count) # {'apple': 5, 'banana': 3, 'orange': 2}Словари широко используются в Python для различных задач:
# Подсчет частоты элементов
text = "hello world hello python world python"
words = text.split()
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # {'hello': 2, 'world': 2, 'python': 2}
# Более компактный способ с использованием defaultdict
from collections import defaultdict
word_count = defaultdict(int)
for word in words:
word_count[word] += 1
print(dict(word_count)) # {'hello': 2, 'world': 2, 'python': 2}