Что такое словарь (dictionary) в Python
Словарь (dictionary) в Python представляет собой изменяемую структуру данных, которая используется для хранения коллекции пар ключ-значение. Ключи в словаре уникальны и неизменяемы, а значения могут быть любого типа данных и могут дублироваться.
Словари Python эффективно решают задачи быстрого поиска, хранения и организации данных, используя хеш-таблицы для обеспечения O(1) времени доступа к элементам.
Создание словаря в Python
Пустой словарь
my_dict = {} # Пустой словарь
# или
my_dict = dict() # Альтернативный способ создания пустого словаря
Инициализация словаря с данными
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
Создание словаря из списка кортежей
pairs = [('name', 'John'), ('age', 30), ('city', 'New York')]
my_dict = dict(pairs)
Создание словаря из списка ключей и значений
keys = ['name', 'age', 'city']
values = ['John', 30, 'New York']
my_dict = dict(zip(keys, values))
Создание словаря с помощью генератора
# Простой генератор словаря
my_dict = {x: x**2 for x in range(1, 6)}
# Генератор с условием
my_dict = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(my_dict) # Вывод: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Метод fromkeys()
keys = ['a', 'b', 'c']
default_value = 0
my_dict = dict.fromkeys(keys, default_value)
print(my_dict) # Вывод: {'a': 0, 'b': 0, 'c': 0}
Поэтапное добавление элементов
my_dict = {}
my_dict['key1'] = 'value1'
my_dict['key2'] = 'value2'
my_dict['key3'] = 'value3'
print(my_dict) # Вывод: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
Основные операции со словарями
Обращение к элементам словаря
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
# Получение значения по ключу
print(my_dict['name']) # Выведет: John
# Безопасное получение значения с помощью get()
print(my_dict.get('salary', 'Не указано')) # Выведет: Не указано
# Изменение значения по ключу
my_dict['age'] = 31
# Добавление новой пары ключ-значение
my_dict['gender'] = 'male'
# Удаление элемента по ключу
del my_dict['city']
Проверка наличия ключа
my_dict = {'name': 'John', 'age': 30}
# Проверка наличия ключа
if 'name' in my_dict:
print("Ключ 'name' существует")
# Проверка отсутствия ключа
if 'salary' not in my_dict:
print("Ключ 'salary' отсутствует")
Итерация по словарю
Перебор ключей
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
# Перебор ключей
for key in my_dict:
print(key)
# Явный перебор ключей
for key in my_dict.keys():
print(key)
Перебор значений
# Перебор значений
for value in my_dict.values():
print(value)
Перебор пар ключ-значение
# Перебор пар ключ-значение
for key, value in my_dict.items():
print(f"{key}: {value}")
Вложенные словари
Словари могут содержать другие словари в качестве значений, что позволяет создавать сложные структуры данных:
employees = {
'emp1': {'name': 'John', 'age': 30, 'department': 'IT'},
'emp2': {'name': 'Alice', 'age': 35, 'department': 'HR'}
}
# Доступ к вложенным данным
print(employees['emp1']['name']) # Выведет: John
# Изменение вложенных данных
employees['emp1']['salary'] = 50000
# Добавление нового сотрудника
employees['emp3'] = {'name': 'Bob', 'age': 28, 'department': 'Marketing'}
Методы словаря в Python
Основные методы словаря
| Метод | Описание |
|---|---|
keys() |
Возвращает представление всех ключей словаря |
values() |
Возвращает представление всех значений словаря |
items() |
Возвращает представление пар ключ-значение |
get(key, default) |
Возвращает значение по ключу или default |
pop(key, default) |
Удаляет и возвращает значение по ключу |
popitem() |
Удаляет и возвращает произвольную пару |
update(other_dict) |
Обновляет словарь данными из другого словаря |
clear() |
Удаляет все элементы словаря |
copy() |
Создает поверхностную копию словаря |
setdefault(key, default) |
Возвращает значение или устанавливает default |
fromkeys(keys, value) |
Создает словарь из ключей с одинаковым значением |
Примеры использования методов
clear() - Очистка словаря
my_dict = {'a': 1, 'b': 2}
my_dict.clear()
print(my_dict) # Вывод: {}
copy() - Создание копии
original_dict = {'a': 1, 'b': 2}
copied_dict = original_dict.copy()
print(copied_dict) # Вывод: {'a': 1, 'b': 2}
get() - Безопасное получение значения
my_dict = {'a': 1, 'b': 2}
value = my_dict.get('a')
print(value) # Вывод: 1
# С значением по умолчанию
value = my_dict.get('c', 'Не найдено')
print(value) # Вывод: Не найдено
pop() - Удаление с возвратом значения
my_dict = {'a': 1, 'b': 2}
value = my_dict.pop('a')
print(value) # Вывод: 1
print(my_dict) # Вывод: {'b': 2}
popitem() - Удаление произвольной пары
my_dict = {'a': 1, 'b': 2}
item = my_dict.popitem()
print(item) # Вывод: ('b', 2)
print(my_dict) # Вывод: {'a': 1}
setdefault() - Установка значения по умолчанию
my_dict = {'a': 1, 'b': 2}
value = my_dict.setdefault('c', 3)
print(value) # Вывод: 3
print(my_dict) # Вывод: {'a': 1, 'b': 2, 'c': 3}
update() - Обновление словаря
my_dict = {'a': 1, 'b': 2}
my_dict.update({'c': 3, 'd': 4})
print(my_dict) # Вывод: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# Обновление с помощью другого словаря
other_dict = {'e': 5, 'f': 6}
my_dict.update(other_dict)
Практические примеры использования словарей
Подсчет элементов
text = "hello world"
char_count = {}
for char in text:
char_count[char] = char_count.get(char, 0) + 1
print(char_count) # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
Группировка данных
students = [
{'name': 'John', 'grade': 'A'},
{'name': 'Alice', 'grade': 'B'},
{'name': 'Bob', 'grade': 'A'},
{'name': 'Charlie', 'grade': 'C'}
]
grades = {}
for student in students:
grade = student['grade']
if grade not in grades:
grades[grade] = []
grades[grade].append(student['name'])
print(grades) # {'A': ['John', 'Bob'], 'B': ['Alice'], 'C': ['Charlie']}
Кэширование результатов
cache = {}
def expensive_function(n):
if n in cache:
return cache[n]
result = n ** 2 # Имитация сложных вычислений
cache[n] = result
return result
Особенности и ограничения словарей
Требования к ключам
Ключи словаря должны быть неизменяемыми (immutable) типами данных:
- Строки, числа, кортежи - можно использовать
- Списки, словари, множества - нельзя использовать
# Правильно
valid_dict = {
'string_key': 'value',
42: 'numeric_key',
(1, 2): 'tuple_key'
}
# Неправильно - вызовет ошибку
# invalid_dict = {[1, 2]: 'list_key'} # TypeError
Производительность
Словари обеспечивают быстрый доступ к элементам со средней сложностью O(1) для операций поиска, вставки и удаления.
Порядок элементов
Начиная с Python 3.7, словари сохраняют порядок вставки элементов, что делает их более предсказуемыми в использовании.
Словари Python являются мощным инструментом для работы с данными и широко используются в различных задачах программирования благодаря своей эффективности и гибкости.