Set comprehension
Set comprehension работает как list comprehension, но результатом становится множество: дубликаты исчезают, а порядок вывода не гарантируется.
words = ["apple", "banana", "cherry", "apple"]
unique_lengths = {len(word) for word in words}
print(unique_lengths)В примере длины слов равны 5 и 6, поэтому в множестве останутся только эти два значения.
frozenset
frozenset создаётся одноимённой функцией и после создания не поддерживает add(), remove(), discard(), pop() и clear().
immutable_set = frozenset([1, 2, 3, 4, 5])
print(immutable_set)
immutable_from_range = frozenset(range(5))
print(immutable_from_range)Так как frozenset неизменяемый и хешируемый, его можно положить в set или использовать как ключ словаря.
frozen_set1 = frozenset([1, 2, 3])
frozen_set2 = frozenset([4, 5, 6])
set_of_frozensets = {frozen_set1, frozen_set2}
print(set_of_frozensets)Словарь и ключи
Словарь хранит пары ключ-значение. Ключи уникальны: если добавить уже существующий ключ, старое значение будет заменено новым.
person = {"name": "Alice", "age": 30, "city": "New York"}
person["age"] = 31
print(person)Ключ должен быть хешируемым: подходят строки, числа, кортежи из хешируемых объектов и frozenset; списки, обычные set и dict не подходят.
same_key = {1.0: "float", 1: "integer", True: "boolean"}
print(same_key)В Python значения 1, 1.0 и True равны при сравнении и имеют совместимое поведение для хеширования, поэтому в одном словаре они считаются одним ключом.
Преобразование в словарь и доступ
dict() принимает последовательность пар. Каждая внутренняя коллекция должна содержать ровно два элемента: ключ и значение.
pairs = [("name", "Charlie"), ("age", 35), ("city", "Paris")]
person = dict(pairs)
print(person["name"])Если ключ отсутствует, квадратные скобки вызывают KeyError. На этом уроке источник предлагает проверять ключ через in.
person = {"name": "Alice", "age": 30}
if "city" in person:
print(person["city"])
else:
print("Город не указан")Добавление, обновление и удаление
Присваивание по новому ключу добавляет пару, присваивание по существующему ключу обновляет значение.
user = {"name": "Alice", "age": 30}
user["city"] = "New York"
user.update({"age": 32, "country": "USA"})
print(user)del удаляет ключ без возврата значения. pop() удаляет и возвращает значение. popitem() удаляет последнюю добавленную пару в современных версиях Python.
user = {"name": "Alice", "age": 30, "city": "New York"}
age = user.pop("age")
print(age)
print(user)popitem() относится к современной практике Python 3.7+.