Python словари: примеры использования пар ключ и значение

Раздел: Коллекции -> Словари

Основные операции со словарями

Базовое создание и доступ к элементам

Наиболее распространённый и эффективный способ работы со словарём в Python - использование литерала {} с парами ключ:значение. Доступ к значению выполняется через квадратные скобки d[key] или метод get(), который возвращает None (или заданное значение по умолчанию) при отсутствии ключа.

# Создание словаря
phonebook = {
    "Alice": "123-456",
    "Bob": "987-654",
    "Charlie": "555-000"
}

# Доступ через квадратные скобки
alice_phone = phonebook["Alice"]
print(alice_phone)  # 123-456

# Безопасный доступ с get
tom_phone = phonebook.get("Tom", "не найден")
print(tom_phone)    # не найден

# Добавление новой пары
phonebook["Diana"] = "333-777"

# Обновление существующего значения
phonebook["Bob"] = "111-222"

# Удаление пары
del phonebook["Charlie"]

print(phonebook)
# {'Alice': '123-456', 'Bob': '111-222', 'Diana': '333-777'}

словарь слов python (словарь слов в python)

Ключи и значения

Ключи должны быть неизменяемыми типами (строки, числа, кортежи), значения - любыми объектами. При попытке обратиться к несуществующему ключу через скобки возникает KeyError.

Типичные ошибки и способы их решения

  • Ошибка: KeyError при обращении к несуществующему ключу. Решение: использовать get() с запасным значением или проверять наличие ключа оператором in.
  • Ошибка: попытка использовать изменяемый тип (список, другой словарь) в качестве ключа. Решение: преобразовать в кортеж или использовать хешируемый тип.
  • Ошибка: изменение словаря во время итерации по его ключам. Решение: создавать копию списка ключей list(dict.keys()) или использовать обёртку list(dict).

Как создать словарь из последовательности пар?

Если пары ключ-значение хранятся в виде списка кортежей, применяется функция dict().

pairs = [("яблоко", 5), ("груша", 3)]
fruit_basket = dict(pairs)
print(fruit_basket)  # {'яблоко': 5, 'груша': 3}

Python значение ключа словаря (значение ключа словаря в python)

Возможные трудности:

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

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

Функция zip() соединяет два итерируемых объекта в пары.

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

ключ значение в python (пары ключ-значение в python)

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

Использование defaultdict из модуля collections позволяет автоматически создавать отсутствующий ключ с фабрикой значений.

from collections import defaultdict

# каждое отсутствующее значение становится списком
groups = defaultdict(list)
colors = [("фрукт", "красный"), ("фрукт", "зелёный"), ("овощ", "жёлтый")]
for category, color in colors:
    groups[category].append(color)

print(groups)
# defaultdict(<class 'list'>, {'фрукт': ['красный', 'зелёный'], 'овощ': ['жёлтый']})

получить значение ключа python (получение значения ключа в python)

Предостережение:

defaultdict при обращении к несуществующему ключу создаёт запись, что может привести к нежелательному заполнению словаря. Для проверки без создания применяйте get() или in.

Как сохранить порядок добавления ключей?

В Python 3.7+ обычные словари уже сохраняют порядок вставки. Для обратной совместимости или явного указания можно использовать OrderedDict.

from collections import OrderedDict

ordered = OrderedDict()
ordered["первый"] = 1
ordered["второй"] = 2
ordered["третий"] = 3
print(ordered)
# OrderedDict([('первый', 1), ('второй', 2), ('третий', 3)])

Python получить ключ (получение ключа словаря в python)

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

Специализированный класс Counter из collections ведёт подсчёт и предоставляет дополнительные методы.

from collections import Counter

words = ["яблоко", "груша", "яблоко", "банан", "груша", "яблоко"]
counts = Counter(words)
print(counts)  # Counter({'яблоко': 3, 'груша': 2, 'банан': 1})
# Топ-2 самых частых
print(counts.most_common(2))  # [('яблоко', 3), ('груша', 2)]

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

Как объединить несколько словарей в один?

Начиная с Python 3.9 применяется оператор |. Ранее использовался {**d1, **d2} или dict(d1, **d2).

d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}

# Оператор слияния
merged = d1 | d2
print(merged)  # {'a': 1, 'b': 3, 'c': 4}

# Распаковка
merged2 = {**d1, **d2}
print(merged2)  # {'a': 1, 'b': 3, 'c': 4}

список значений словаря python (список значений словаря в python)

Внимание:

При совпадении ключей приоритет имеет правый словарь.

Как добавить значение, если ключ отсутствует, иначе не менять?

Метод setdefault() устанавливает значение для ключа только если его ещё нет, и возвращает текущее значение.

d = {"x": 10}
d.setdefault("y", []).append(1)  # создаст 'y': [1]
d.setdefault("x", 0).append(2)   # ошибка, потому что 'x' - число; на практике это не append
print(d)  # {'x': 10, 'y': [1]}

удаление словаря python (удаление элемента из словаря в python)

Как пройти по всем парам ключ-значение?

Метод items() возвращает итератор кортежей (ключ, значение).

d = {"a": 1, "b": 2}
for key, value in d.items():
    print(f"{key} = {value}")
# a = 1
# b = 2

Аналогично keys() и values() для отдельных компонентов.

- Python найти в словаре (поиск ключа в словаре python)
- Python элемент словаря по ключу (получение элемента словаря по ключу)
- Python dict в строку (преобразование словаря в строку в python)

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

Генератор словаря с условиями

Словари можно создавать с помощью включения (dict comprehension), например, фильтруя данные.

Пример
# Словарь из последовательности, где значения больше 10
numbers = [5, 12, 7, 18, 3]
big_numbers = {num: num**2 for num in numbers if num > 10}
print(big_numbers)  # {12: 144, 18: 324}
{12: 144, 18: 324}

Преобразование ключей и значений

Можно инвертировать словарь, если значения являются хешируемыми.

Пример
original = {"a": 1, "b": 2, "c": 3}
inverted = {value: key for key, value in original.items()}
print(inverted)  # {1: 'a', 2: 'b', 3: 'c'}

Проблема: если значения повторяются, последний ключ выигрывает. Для сохранения всех ключей можно использовать defaultdict(list).

Пример
from collections import defaultdict

original = {"a": 1, "b": 2, "c": 1}
inv = defaultdict(list)
for k, v in original.items():
    inv[v].append(k)
print(dict(inv))  # {1: ['a', 'c'], 2: ['b']}

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

Словарь сам по себе не сортируется, можно получить отсортированный список пар.

Пример
d = {"banana": 3, "apple": 1, "cherry": 2}
# По ключам
sorted_by_key = dict(sorted(d.items()))
print(sorted_by_key)  # {'apple': 1, 'banana': 3, 'cherry': 2}

# По значениям
sorted_by_value = dict(sorted(d.items(), key=lambda item: item[1]))
print(sorted_by_value)  # {'apple': 1, 'cherry': 2, 'banana': 3}

Распаковка словаря в аргументы функции

Оператор ** передаёт пары ключ-значение как именованные аргументы.

Пример
def greet(name, age):
    return f"{name} is {age} years old"

info = {"name": "Anna", "age": 25}
print(greet(**info))  # Anna is 25 years old

Вложенные словари и доступ к глубоким уровням

Для безопасного доступа к вложенным ключам можно написать рекурсивную функцию или использовать get() цепочкой.

Пример
data = {
    "users": {
        "alice": {"age": 30, "city": "Moscow"},
        "bob": {"age": 25}
    }
}

# Безопасное получение возраста alice
alice_age = data.get("users", {}).get("alice", {}).get("age", "unknown")
print(alice_age)  # 30

# Если ключа нет
bob_city = data.get("users", {}).get("bob", {}).get("city", "unknown")
print(bob_city)  # unknown

Словарь как кэш (мемоизация)

Словарь может сохранять результаты вызовов функций для ускорения.

Пример
def fib(n, cache={}):
    if n in cache:
        return cache[n]
    if n < 2:
        return n
    cache[n] = fib(n-1, cache) + fib(n-2, cache)
    return cache[n]

print(fib(50))  # 12586269025 (быстро благодаря кэшу)

Преобразование словаря в JSON и обратно

Пример
import json

data = {"name": "Python", "version": 3.11, "features": ["dynamic", "interpreted"]}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
'''
{
  "name": "Python",
  "version": 3.11,
  "features": [
    "dynamic",
    "interpreted"
  ]
}
'''

# Обратно
loaded = json.loads(json_str)
print(loaded == data)  # True

Использование chainmap для объединения словарей без создания нового

Пример
from collections import ChainMap

base = {"x": 1, "y": 2}
override = {"y": 3, "z": 4}
combined = ChainMap(override, base)
print(combined["x"])  # 1 (из base)
print(combined["y"])  # 3 (первый найденный из override)
print(combined["z"])  # 4

# Изменения влияют на первый словарь
combined["x"] = 10
print(override)  # {'y': 3, 'z': 4, 'x': 10}

Словари с ключами, являющимися кортежами

Пример
coords = {(0, 0): "начало", (1, 0): "право", (0, -1): "вниз"}
print(coords[(0, 0)])  # начало

Кортежи могут содержать только хешируемые элементы. Если ключ содержит список, возникает ошибка TypeError: unhashable type: 'list'.

Пары ключ-значение в Python - comments

En
ключ значение в python (python)