Словари в Python представляют собой неупорядоченные коллекции пар "ключ-значение", где ключи уникальны. Они очень полезны для хранения и манипулирования данными, которые должны быть связаны друг с другом. Давайте рассмотрим создание, использование и основные операции со словарями.
Создание словарей
Пустой словарь
empty_dict = {}
# или
empty_dict = dict()
Словарь с элементами
person = {
"name": "Alice",
"age": 30,
"city": "New York"
}
Создание словаря с использованием функции
dict()
person = dict(name="Alice", age=30, city="New York")
Доступ к элементам словаря
Чтение значения по ключу
print(person["name"]) # Alice
Изменение значения по ключу
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'}
Удаление элемента
Метод
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) # {}
Основные методы работы со словарями
Метод
get()
Возвращает значение по ключу, если ключ существует, иначе возвращает значение по умолчанию (None или заданное).
name = person.get("name")
print(name) # Alice
middle_name = person.get("middle_name", "N/A")
print(middle_name) # N/A
Метод
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')])
Метод
update()
Обновляет словарь, добавляя пары "ключ-значение" из другого словаря или из переданных именованных аргументов.
person.update({"email": "alice@example.com", "age": 31})
print(person)
# {'name': 'Alice', 'age': 31, 'city': 'New York', 'email': 'alice@example.com'}
Перебор элементов словаря
Перебор ключей
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
Примеры использования словарей
Подсчет частоты элементов
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}
Группировка элементов по ключам
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)
# {
# 'New York': [{'name': 'Alice', 'age': 30, 'city': 'New York'}, {'name': 'Dave', 'age': 30, 'city': 'New York'}],
# 'Los Angeles': [{'name': 'Bob', 'age': 25, 'city': 'Los Angeles'}],
# 'Chicago': [{'name': 'Charlie', 'age': 35, 'city': 'Chicago'}]
# }
Объединение словарей
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
# Метод update()
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}
Генераторы словарей
Генераторы словарей позволяют создавать словари с помощью краткой записи.
squares = {x: x ** 2 for x in range(6)}
print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Полезные приемы со словарями
Инвертирование словаря
Инвертирование ключей и значений в словаре.
original = {"a": 1, "b": 2, "c": 3}
inverted = {v: k for k, v in original.items()}
print(inverted) # {1: 'a', 2: 'b', 3: 'c'}
Проверка наличия ключа
Проверка, существует ли ключ в словаре, используя оператор
in
.if "name" in person:
print("Name is in the dictionary")
Объединение словарей с обновлением значений
Использование метода
update()
для объединения словарей с приоритетом значений из второго словаря.dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict1.update(dict2)
print(dict1) # {'a': 1, 'b': 3, 'c': 4}
Создание словаря из двух списков
Использование функции
zip()
для создания словаря из двух списков.keys = ["name", "age", "city"]
values = ["Alice", 30, "New York"]
person = dict(zip(keys, values))
print(person) # {'name': 'Alice', 'age': 30, 'city': 'New York'}