Что такое словари в Python?
Словари (dict) в Python — это встроенная структура данных, представляющая собой изменяемые коллекции пар "ключ-значение". Каждый ключ в словаре уникален и служит для доступа к соответствующему значению. Словари широко используются для хранения связанных данных и обеспечивают быстрый доступ к элементам.
Создание словарей в Python
Пустой словарь
empty_dict = {}
# или
empty_dict = dict()
Словарь с элементами
person = {
"name": "Alice",
"age": 30,
"city": "New York"
}
Создание словаря с использованием функции dict()
person = dict(name="Alice", age=30, city="New York")
Создание словаря из двух списков
keys = ["name", "age", "city"]
values = ["Alice", 30, "New York"]
person = dict(zip(keys, values))
print(person) # {'name': 'Alice', 'age': 30, 'city': 'New York'}
Доступ к элементам словаря
Чтение значения по ключу
print(person["name"]) # Alice
Безопасный доступ с помощью метода get()
name = person.get("name")
print(name) # Alice
middle_name = person.get("middle_name", "N/A")
print(middle_name) # N/A
Проверка наличия ключа
if "name" in person:
print("Ключ 'name' существует в словаре")
Изменение и добавление элементов
Изменение значения по ключу
person["age"] = 31
print(person["age"]) # 31
Добавление нового элемента
person["email"] = "alice@example.com"
print(person)
# {'name': 'Alice', 'age': 31, 'city': 'New York', 'email': 'alice@example.com'}
Обновление словаря методом update()
person.update({"email": "alice@example.com", "age": 31})
print(person)
# {'name': 'Alice', 'age': 31, 'city': 'New York', 'email': 'alice@example.com'}
Удаление элементов из словаря
Метод pop()
Удаляет элемент по ключу и возвращает его значение:
age = person.pop("age")
print(age) # 31
print(person)
# {'name': 'Alice', 'city': 'New York', 'email': 'alice@example.com'}
Метод popitem()
Удаляет и возвращает последнюю добавленную пару "ключ-значение":
last_item = person.popitem()
print(last_item) # ('email', 'alice@example.com')
print(person)
# {'name': 'Alice', 'city': 'New York'}
Оператор del
Удаляет элемент по ключу:
del person["city"]
print(person)
# {'name': 'Alice'}
Метод clear()
Удаляет все элементы из словаря:
person.clear()
print(person) # {}
Основные методы работы со словарями
Метод keys()
Возвращает представление всех ключей в словаре:
keys = person.keys()
print(keys) # dict_keys(['name', 'age', 'city'])
Метод values()
Возвращает представление всех значений в словаре:
values = person.values()
print(values) # dict_values(['Alice', 30, 'New York'])
Метод items()
Возвращает представление всех пар "ключ-значение":
items = person.items()
print(items) # dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])
Итерация по словарю
Перебор ключей
for key in person:
print(key)
Перебор значений
for value in person.values():
print(value)
Перебор пар "ключ-значение"
for key, value in person.items():
print(f"{key}: {value}")
Вложенные словари
Словари могут содержать другие словари в качестве значений:
people = {
"Alice": {"age": 30, "city": "New York"},
"Bob": {"age": 25, "city": "Los Angeles"},
"Charlie": {"age": 35, "city": "Chicago"}
}
print(people["Alice"]["city"]) # New York
Генераторы словарей (Dictionary Comprehensions)
Генераторы словарей позволяют создавать словари с помощью краткой записи:
squares = {x: x ** 2 for x in range(6)}
print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Словарь с условием
even_squares = {x: x ** 2 for x in range(10) if x % 2 == 0}
print(even_squares) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
Объединение словарей
Использование метода update()
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
combined = dict1.copy()
combined.update(dict2)
print(combined) # {'a': 1, 'b': 3, 'c': 4}
Использование оператора **
combined = {**dict1, **dict2}
print(combined) # {'a': 1, 'b': 3, 'c': 4}
Использование оператора | (Python 3.9+)
combined = dict1 | dict2
print(combined) # {'a': 1, 'b': 3, 'c': 4}
Практические примеры использования словарей
Подсчет частоты элементов
text = "hello world"
frequency = {}
for char in text:
if char in frequency:
frequency[char] += 1
else:
frequency[char] = 1
print(frequency)
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
# Альтернативный способ с get()
frequency = {}
for char in text:
frequency[char] = frequency.get(char, 0) + 1
Группировка элементов по ключам
data = [
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 25, "city": "Los Angeles"},
{"name": "Charlie", "age": 35, "city": "Chicago"},
{"name": "Dave", "age": 30, "city": "New York"}
]
grouped_by_city = {}
for item in data:
city = item["city"]
if city not in grouped_by_city:
grouped_by_city[city] = []
grouped_by_city[city].append(item)
print(grouped_by_city)
Инвертирование словаря
original = {"a": 1, "b": 2, "c": 3}
inverted = {v: k for k, v in original.items()}
print(inverted) # {1: 'a', 2: 'b', 3: 'c'}
Кеширование результатов функций
def fibonacci(n, cache={}):
if n in cache:
return cache[n]
if n <= 1:
return n
result = fibonacci(n-1, cache) + fibonacci(n-2, cache)
cache[n] = result
return result
Использование collections.defaultdict
Для упрощения работы с группировкой данных можно использовать defaultdict:
from collections import defaultdict
grouped_by_city = defaultdict(list)
for item in data:
grouped_by_city[item["city"]].append(item)
Использование collections.Counter
Для подсчета частоты элементов удобно использовать Counter:
from collections import Counter
text = "hello world"
frequency = Counter(text)
print(frequency) # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
Лучшие практики работы со словарями
- Используйте метод get() для безопасного доступа к ключам
- Проверяйте наличие ключей с помощью оператора
in - Используйте генераторы словарей для создания словарей на основе условий
- Применяйте defaultdict для упрощения группировки данных
- Используйте Counter для подсчета частоты элементов
Словари являются одной из самых мощных и универсальных структур данных в Python, обеспечивая эффективное хранение и доступ к данным по ключам. Их понимание и умелое использование значительно упрощает решение многих программистских задач.
таблица с методами словарей в Python:
| Метод | Описание | Пример использования | Результат |
|---|---|---|---|
dict.get(key, default) |
Получает значение по ключу, возвращает default если ключ не найден | d.get('name', 'Unknown') |
Значение или default |
dict.keys() |
Возвращает все ключи словаря | d.keys() |
dict_keys(['key1', 'key2']) |
dict.values() |
Возвращает все значения словаря | d.values() |
dict_values(['val1', 'val2']) |
dict.items() |
Возвращает пары ключ-значение | d.items() |
dict_items([('key1', 'val1')]) |
dict.pop(key, default) |
Удаляет и возвращает значение по ключу | d.pop('name', 'Not found') |
Удаленное значение |
dict.popitem() |
Удаляет и возвращает последнюю пару ключ-значение | d.popitem() |
('key', 'value') |
dict.clear() |
Очищает словарь | d.clear() |
{} |
dict.copy() |
Создает поверхностную копию словаря | d.copy() |
Новый словарь |
dict.update(other) |
Обновляет словарь данными из другого словаря | d.update({'new': 'value'}) |
None (изменяет исходный) |
dict.setdefault(key, default) |
Получает значение или устанавливает default | d.setdefault('count', 0) |
Значение или default |
dict.fromkeys(keys, value) |
Создает словарь с заданными ключами | dict.fromkeys(['a', 'b'], 0) |
{'a': 0, 'b': 0} |
Дополнительные операции:
| Операция | Описание | Пример | Результат |
|---|---|---|---|
key in dict |
Проверяет наличие ключа | 'name' in d |
True/False |
len(dict) |
Количество элементов | len(d) |
Число |
del dict[key] |
Удаляет элемент по ключу | del d['name'] |
Удаление |
dict[key] = value |
Добавляет/изменяет элемент | d['age'] = 25 |
Присваивание |
Эти методы покрывают основные операции работы со словарями и позволяют эффективно манипулировать данными.