Словари Python: практическое руководство с разнообразными примерами

Раздел: Прочее -> Основы языка Python

Основы работы со словарями в Python

Словарь (dict) - это неупорядоченная коллекция пар «ключ - значение». Ключи должны быть уникальными и неизменяемыми (строки, числа, кортежи). Ниже показан наиболее эффективный способ создания словаря и базовые операции.

# Создание словаря с помощью литерала
user = {
    "name": "Анна",
    "age": 25,
    "city": "Москва"
}
print(user)

проверить является ли числом python (проверка, является ли значение числом в python)

{'name': 'Анна', 'age': 25, 'city': 'Москва'}

что делает strip в python (метод strip() в python)

Доступ к значению по ключу:

print(user["name"])

математические примеры python (математические примеры в python)

Анна

новые возможности условного оператора python (новые возможности условного оператора в python)

Добавление или изменение элемента:

user["email"] = "anna@example.com"
print(user)

Float python пример (примеры float в python)

{'name': 'Анна', 'age': 25, 'city': 'Москва', 'email': 'anna@example.com'}

Python кортежи примеры (примеры кортежей в python)

Удаление по ключу:

del user["age"]
print(user)

словарь в python пример (примеры словарей в python)

{'name': 'Анна', 'city': 'Москва', 'email': 'anna@example.com'}

является ли число четным python (проверка числа на четность в python)

Распространённые ошибки:

  • Обращение к несуществующему ключу вызывает KeyError. Используйте метод .get() для безопасного доступа.
  • Попытка использовать изменяемый тип (например, список) в качестве ключа приводит к TypeError.

Как создать словарь с помощью функции dict()?

# Из последовательности пар
pairs = [("a", 1), ("b", 2)]
d = dict(pairs)
print(d)

типы данных в python с примерами (типы данных в python с примерами)

{'a': 1, 'b': 2}

множественный выбор python (множественный выбор (if-elif-else) в python)

Проблема: дублирующиеся ключи - последнее значение перезаписывает предыдущее.

Как безопасно получить значение по ключу, избежав ошибки?

data = {"x": 42}
print(data.get("y", "значение не найдено"))
значение не найдено

Метод .get() возвращает значение по умолчанию, если ключа нет.

Как объединить два словаря или обновить один другим?

d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
d1.update(d2)
print(d1)
{'a': 1, 'b': 3, 'c': 4}

В Python 3.9+ также доступен оператор |:

merged = d1 | d2
print(merged)

Проблема: существующие ключи в d1 перезаписываются значениями из d2. Если нужно сохранить исходные, лучше создать копию.

Как удалить элемент и получить его значение?

d = {"one": 1, "two": 2, "three": 3}
val = d.pop("two")
print(val, d)
2 {'one': 1, 'three': 3}

.popitem() удаляет и возвращает последнюю добавленную пару (с Python 3.7 порядок сохраняется).

Как перебрать словарь в цикле?

person = {"name": "Иван", "job": "инженер"}

# По ключам
for key in person:
    print(key, person[key])

# По парам
for key, value in person.items():
    print(key, value)

# Только значения
for value in person.values():
    print(value)

Как создать словарь с помощью генератора (словарного включения)?

# Квадраты чисел
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(10) if x % 2 == 0}
print(even_squares)
{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

Как использовать defaultdict для автоматического создания значений по умолчанию?

from collections import defaultdict

# Список как значение по умолчанию
dd = defaultdict(list)
dd["fruits"].append("apple")
dd["fruits"].append("banana")
print(dd)
defaultdict(<class 'list'>, {'fruits': ['apple', 'banana']})

Полезно для группировки данных.

Как подсчитать количество элементов с помощью Counter?

from collections import Counter

colors = ["red", "blue", "red", "green", "blue", "blue"]
count = Counter(colors)
print(count)
Counter({'blue': 3, 'red': 2, 'green': 1})

Как создать упорядоченный словарь (OrderedDict)?

from collections import OrderedDict

od = OrderedDict()
od["first"] = 1
od["second"] = 2
print(od)
OrderedDict([('first', 1), ('second', 2)])

Начиная с Python 3.7 обычный dict тоже сохраняет порядок вставки, но OrderedDict предоставляет дополнительные методы, такие как .move_to_end().

Как проверить, существует ли ключ в словаре?

d = {"a": 1}
print("a" in d, "b" in d)
True False

Оператор in проверяет только ключи.

Как получить список ключей, значений или пар?

d = {"x": 10, "y": 20}
print(list(d.keys()))
print(list(d.values()))
print(list(d.items()))
['x', 'y']
[10, 20]
[('x', 10), ('y', 20)]

В Python 3 возвращаются представления (view objects), которые динамически отражают изменения словаря.

Как очистить словарь?

d = {1: "one"}
d.clear()
print(d)
{}

Как создать словарь из двух списков (ключи и значения)?

keys = ["a", "b", "c"]
values = [1, 2, 3]
zipped = dict(zip(keys, values))
print(zipped)
{'a': 1, 'b': 2, 'c': 3}

Проблема: если длины разные, zip обрезает до минимальной.

Расширенные примеры со словарями

Вложенные словари

Пример
# Хранение структурированных данных
company = {
    "employees": {
        "john": {"age": 30, "role": "developer"},
        "jane": {"age": 28, "role": "designer"}
    },
    "location": "NYC"
}
print(company["employees"]["jane"]["role"])
designer

Сортировка словаря по ключам и значениям

Пример
data = {"z": 3, "a": 1, "c": 2}

# По ключам
sorted_by_keys = dict(sorted(data.items()))
print("По ключам:", sorted_by_keys)

# По значениям
sorted_by_values = dict(sorted(data.items(), key=lambda item: item[1]))
print("По значениям:", sorted_by_values)
По ключам: {'a': 1, 'c': 2, 'z': 3}
По значениям: {'a': 1, 'c': 2, 'z': 3}

Слияние словарей с сохранением исходных значений

Пример
d1 = {"a": 1, "b": 2}
d2 = {"b": 99, "c": 3}

# Сохранение значений из d1 при конфликте
merged = {**d2, **d1}  # d1 перезаписывает d2
print(merged)

# Или наоборот: merged = {**d1, **d2}
{'b': 2, 'c': 3, 'a': 1}

Словарь как аналог switch-case

Пример
def action(operation):
    switcher = {
        "add": lambda a, b: a + b,
        "substract": lambda a, b: a - b,
        "multiply": lambda a, b: a * b,
        "divide": lambda a, b: a / b if b != 0 else "деление на ноль"
    }
    func = switcher.get(operation, lambda a, b: "неизвестная операция")
    return func(10, 5)

print(action("add"))
print(action("divide"))
15
2.0

Работа с JSON и словарями

Пример
import json

data = {"name": "Alex", "age": 30}
json_str = json.dumps(data, indent=2)
print("JSON строка:")
print(json_str)

# Обратно в словарь
restored = json.loads(json_str)
print("Восстановленный словарь:", restored)
JSON строка:
{
  "name": "Alex",
  "age": 30
}
Восстановленный словарь: {'name': 'Alex', 'age': 30}

Использование целых чисел и кортежей в качестве ключей

Пример
# Числовые ключи
numeric = {1: "one", 2: "two"}
print(numeric[1])

# Кортежи как ключи (например, для координат)
points = {(0, 0): "origin", (1, 2): "point A"}
print(points[(1, 2)])
one
point A

Словарь с множествами значений (setdefault)

Пример
data = [("fruit", "apple"), ("fruit", "banana"), ("drink", "water")]
d = {}
for category, item in data:
    d.setdefault(category, []).append(item)
print(d)
{'fruit': ['apple', 'banana'], 'drink': ['water']}

Обратная сортировка и ограничение

Пример
scores = {"Alice": 85, "Bob": 72, "Charlie": 95}
# Топ-2 по убыванию
sorted_items = sorted(scores.items(), key=lambda x: x[1], reverse=True)[:2]
top_two = dict(sorted_items)
print(top_two)
{'Charlie': 95, 'Alice': 85}

Словарь из значений перечисления (enum)

Пример
from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

color_map = {c.name: c.value for c in Color}
print(color_map)
{'RED': 1, 'GREEN': 2, 'BLUE': 3}

Объединение вложенных словарей с помощью ChainMap

Пример
from collections import ChainMap

d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
chain = ChainMap(d1, d2)
print(chain["a"], chain["b"], chain["c"])  # при поиске сначала d1
1 2 4

Копирование словаря (поверхностное и глубокое)

Пример
import copy

original = {"x": [1, 2], "y": 3}
# Поверхностная копия
shallow = original.copy()
shallow["x"].append(99)
print(original["x"])  # изменения видны в оригинале

# Глубокая копия
deep = copy.deepcopy(original)
deep["x"].append(100)
print(original["x"])  # оригинал не изменился
[1, 2, 99]
[1, 2, 99]

Примеры словарей в Python - comments

En
словарь в python пример (python)