Основы работы со словарями в Python: создание, методы и использование для хранения пар "ключ-значение" для эффективного доступа к данным.

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Что такое словари в Python?

Словари (dict) в Python — это встроенная структура данных, представляющая собой изменяемые коллекции пар "ключ-значение". Каждый ключ в словаре уникален и служит для доступа к соответствующему значению. Словари широко используются для хранения связанных данных и обеспечивают быстрый доступ к элементам.

Создание словарей в Python

Пустой словарь

empty_dict = {}
# или
empty_dict = dict()

Словарь с элементами

person = {
    "name": "Alice",
    "age": 30,
    "city": "New York"
}

Создание словаря с использованием функции dict()

person = dict(name="Alice", age=30, city="New York")

Создание словаря из двух списков

keys = ["name", "age", "city"]
values = ["Alice", 30, "New York"]

person = dict(zip(keys, values))
print(person)  # {'name': 'Alice', 'age': 30, 'city': 'New York'}

Доступ к элементам словаря

Чтение значения по ключу

print(person["name"])  # Alice

Безопасный доступ с помощью метода get()

name = person.get("name")
print(name)  # Alice

middle_name = person.get("middle_name", "N/A")
print(middle_name)  # N/A

Проверка наличия ключа

if "name" in person:
    print("Ключ 'name' существует в словаре")

Изменение и добавление элементов

Изменение значения по ключу

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'}

Обновление словаря методом update()

person.update({"email": "alice@example.com", "age": 31})
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)  # {}

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

Метод 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')])

Итерация по словарю

Перебор ключей

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

Генераторы словарей (Dictionary Comprehensions)

Генераторы словарей позволяют создавать словари с помощью краткой записи:

squares = {x: x ** 2 for x in range(6)}
print(squares)  # {0: 0, 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}

Объединение словарей

Использование метода update()

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}

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}

Использование оператора | (Python 3.9+)

combined = dict1 | dict2
print(combined)  # {'a': 1, 'b': 3, 'c': 4}

Практические примеры использования словарей

Подсчет частоты элементов

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}

# Альтернативный способ с get()
frequency = {}
for char in text:
    frequency[char] = frequency.get(char, 0) + 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)

Инвертирование словаря

original = {"a": 1, "b": 2, "c": 3}
inverted = {v: k for k, v in original.items()}
print(inverted)  # {1: 'a', 2: 'b', 3: 'c'}

Кеширование результатов функций

def fibonacci(n, cache={}):
    if n in cache:
        return cache[n]
    
    if n <= 1:
        return n
    
    result = fibonacci(n-1, cache) + fibonacci(n-2, cache)
    cache[n] = result
    return result

Использование collections.defaultdict

Для упрощения работы с группировкой данных можно использовать defaultdict:

from collections import defaultdict

grouped_by_city = defaultdict(list)
for item in data:
    grouped_by_city[item["city"]].append(item)

Использование collections.Counter

Для подсчета частоты элементов удобно использовать Counter:

from collections import Counter

text = "hello world"
frequency = Counter(text)
print(frequency)  # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

Лучшие практики работы со словарями

  1. Используйте метод get() для безопасного доступа к ключам
  2. Проверяйте наличие ключей с помощью оператора in
  3. Используйте генераторы словарей для создания словарей на основе условий
  4. Применяйте defaultdict для упрощения группировки данных
  5. Используйте Counter для подсчета частоты элементов

Словари являются одной из самых мощных и универсальных структур данных в Python, обеспечивая эффективное хранение и доступ к данным по ключам. Их понимание и умелое использование значительно упрощает решение многих программистских задач.

 таблица с методами словарей в Python:

Метод Описание Пример использования Результат
dict.get(key, default) Получает значение по ключу, возвращает default если ключ не найден d.get('name', 'Unknown') Значение или default
dict.keys() Возвращает все ключи словаря d.keys() dict_keys(['key1', 'key2'])
dict.values() Возвращает все значения словаря d.values() dict_values(['val1', 'val2'])
dict.items() Возвращает пары ключ-значение d.items() dict_items([('key1', 'val1')])
dict.pop(key, default) Удаляет и возвращает значение по ключу d.pop('name', 'Not found') Удаленное значение
dict.popitem() Удаляет и возвращает последнюю пару ключ-значение d.popitem() ('key', 'value')
dict.clear() Очищает словарь d.clear() {}
dict.copy() Создает поверхностную копию словаря d.copy() Новый словарь
dict.update(other) Обновляет словарь данными из другого словаря d.update({'new': 'value'}) None (изменяет исходный)
dict.setdefault(key, default) Получает значение или устанавливает default d.setdefault('count', 0) Значение или default
dict.fromkeys(keys, value) Создает словарь с заданными ключами dict.fromkeys(['a', 'b'], 0) {'a': 0, 'b': 0}

Дополнительные операции:

Операция Описание Пример Результат
key in dict Проверяет наличие ключа 'name' in d True/False
len(dict) Количество элементов len(d) Число
del dict[key] Удаляет элемент по ключу del d['name'] Удаление
dict[key] = value Добавляет/изменяет элемент d['age'] = 25 Присваивание

Эти методы покрывают основные операции работы со словарями и позволяют эффективно манипулировать данными.

 

категории

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы
  • Общая база питона