Баннер мобильный (3) Пройти тест

Словари в Python: как они работают, зачем нужны и как использовать их эффективно

Бонус: самостоятельное задание

Разбор

30 апреля 2025

Поделиться

Скопировано
Словари в Python: как они работают, зачем нужны и как использовать их эффективно

Содержание

    Когда мы слышим слово «словарь», чаще всего представляем толстую книгу, где каждому слову соответствует определение. В Python тоже есть словари. Только вместо слов и определений в них — ключи и значения. В этой статье разберемся, что такое словари в Python, как их создавать и как использовать в реальных задачах.

    Что такое словари и как их создать

    Словарь в языке Python — это неупорядоченная коллекция элементов, в которой каждый элемент имеет ключ и связанное с ним значение. Общий синтаксис определения словаря имеет следующий вид:

    dictionary = { key1: value1, key2: value2, ....}

    Как видно, ключ и связанное с ним значение разделяются двоеточием, а сами элементы словаря пишутся через запятую и заключаются в фигурные скобки. Вот пример определения словаря, содержащего первые три планеты Солнечной системы:

    planets = {1: "Меркурий", 2: "Венера", 3: "Земля"}

    В качестве ключей здесь выступают порядковые номера планет, а в качестве значений приводятся их названия. Иногда бывает нужно создать пустой словарь, чтобы потом наполнить его элементами. Делается это так:

    dict = {}

    Или же при помощи специальной функции dict:

    dict = dict()

    Создадим с помощью функции dict словарь. Сделать это можно так:

    planets = dict({1: "Меркурий", 2: "Венера", 3: "Земля"})

    Здесь мы передали на вход функции dict само определение словаря. Также можно попробовать преобразовать список в словарь:

    planets_list = [
        [1, "Меркурий"],
        [2, "Венера"],
        [3, "Земля"]
    ]
    
    planets = dict(planets_list)

    Еще можно превратить в словарь кортеж:

    planets_tuple = (
        (1, "Меркурий"),
        (2, "Венера"),
        (3, "Земля")
    )
    
    planets = dict(planets_tuple)

    В двух последних примерах мы создали список и кортеж, а потом просто передали их на вход функции dict — и таким образом получили словарь. Далее рассмотрим, как получать, изменять, а также удалять элементы словаря.

    Получение, добавление, изменение и удаление элементов

    В этом разделе рассмотрим на простых примерах, как можно получать, добавлять, изменять и удалять элементы словаря.

    Получение элементов. Метод get

    Допустим, у нас есть вот такой словарь:

    email = {"Кристина": "kristina@mail.ru", "Олег": "oleg@gmail.com", "Маша": "maria@ya.ru"}

    Как получить из этого словаря, например, электронную почту Олега? Сделать это можно, обратившись к нужному элементу по его ключу:

    print(email["Олег"])

    В результате получим такой вывод в консоли:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    oleg@gmail.com

    Почту получили. Но если мы попытаемся получить значение, ключ которого отсутствует в словаре, то получим ошибку KeyError. Чтобы этого избежать, лучше всего проверить наличие элемента в словаре. Сделать это можно при помощи условного оператора if:

    key = "Олег"
    if key in email:
        user_email = email[key]
        print(user_email)
    else:
        print(f"Элемент с ключом {key} не найден")

    Получить значение элемента можно и другим способом — с помощью метода get. Просто передаём ему на вход ключ, и он вернёт нужное значение:

    user_email = email.get("Олег")
    
    print(user_email)

    У метода get можно использовать и второй аргумент. Он нужен, чтобы определить значение по умолчанию. То есть, если элемент не найден, будет выведено значение второго аргумента:

    user_email = email.get("Михаил", "Неизвестный пользователь")
    
    print(user_email)

    В консоли получим:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    Неизвестный пользователь

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

    Теперь добавим в словарь еще один элемент. Пусть это будет некий Виктор с почтой victor@mail.ru:

    email["Виктор"] = "victor@mail.ru"

    Убедимся, что элемент успешно добавлен. Выведем весь словарь в консоль:

    print(email)

    Получим такой вывод:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    
    {'Кристина': 'kristina@mail.ru', 'Олег': 'oleg@gmail.com', 'Маша': 'maria@ya.ru', 'Виктор': 'victor@mail.ru

    Элемент успешно добавлен. Можем обратиться к нему по ключу:

    print(email["Виктор"])

    Результат:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    victor@mail.ru

    Изменение элементов

    А как нам изменить элемент? Допустим, что нам нужно поменять почту Виктора. Как это сделать? Поступаем так же, как и при добавлении элемента. Обращаемся к нему по ключу и связываем с ним новое значение:

    email["Виктор"] = "victor@rambler.ru"

    То есть это работает так: если ключ найден, то его значение перезаписывается, а если такой ключ не обнаружен, то добавляется новый элемент с этим ключом. Проверим, записалась ли новая почта Виктора:

    print(email["Виктор"])

    Получим:

    env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    victor@rambler.ru

    Как видим, все довольно просто! 

    Удаление элементов. Оператор del и методы pop и clear

    Удалить элемент тоже не составит особого труда. Для этого используется оператор del. Удалим из словаря все того же Виктора:

    del email["Виктор"]

    Выведем весь словарь и убедимся, что Виктора там больше нет:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    {'Кристина': 'kristina@mail.ru', 'Олег': 'oleg@gmail.com', 'Маша': 'maria@ya.ru'}

    Если при удалении вдруг окажется, что такого элемента не обнаружено, то мы получим исключение KeyError. Поэтому лучше всего перед удалением сначала проверить наличие элемента с данным ключом в словаре. Делается это также, как и в вышеприведенном случае с получением значения:

    key = "Виктор"
    if key in email:
        del email[key]
    else:
        print(f"Элемент с ключом {key} не найден")

    Также для удаления элементов можно использовать метод pop:

    user_email = email.pop("Виктор")

    В переменную user_email будет записана почта Виктора, а сам элемент с ключом «Виктор» будет удален. Также для этого метода доступен и второй аргумент. Это значение по умолчанию. Оно будет возвращено в случае, если элемент с данным ключом не будет найден:

    user_email = email.pop("Михаил", "Неизвестный пользователь")

    Как видим, метод pop во многом похож на ранее рассмотренный метод get. Для удаления всех элементов словаря можно воспользоваться методом clear:

    email.clear()
    
    print(email)

    Вывод будет таким:

    env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    {}

    Двигаемся дальше.

    Обновление словаря. Методы update и copy

    Пусть нам даны два словаря:

    dict1 = {"Верификация": "Проверка подлинности данных", "Демаркация": "Разметка границы на местности"}
    
    dict2 = {"Моветон": "Дурной тон, невоспитанность", "Синопсис": "Изложение некоторой темы в сильно сжатом и обобщенном виде"}

    Как объединить эти два словаря в один? Это можно сделать при помощи метода update. Если вызвать этот метод для первого словаря, а на вход метода подать второй словарь, то список элементов первого словаря будет дополнен элементами второго словаря. Вот так это делается:

    dict1.update(dict2)

    Выведем теперь в консоль первый словарь:

    print(dict1)

    Получим:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    {'Верификация': 'Проверка подлинности данных', 'Демаркация': 'Разметка границы на местности', 'Моветон': 'Дурной тон, невоспитанность', 'Синопсис': 'Изложение некоторой темы в сильно сжатом и обобщенном виде'}

    Как видим, первый словарь был успешно обновлен. А вот второй словарь остался без изменений. Иногда бывает полезно сохранить все исходные словари. Для этого можно воспользоваться методом copy. Он создаст копию нужного словаря и запишет ее в новый словарь:

    dict3 = dict1.copy()

    Вызывать этот метод необходимо до обновления словаря.

    Перебор элементов словаря. Методы items, keys и values

    При помощи цикла for можно осуществить перебор всех элементов словаря. Возьмем вот такой словарь:

    main_city = {"Россия": "Москва", "Китай": "Пекин", "Северная Корея": "Пхеньян"}

    И напишем для него такой цикл:

    for key in main_city:
        print(f"Страна: {key}  Столица: {main_city[key]}")

    Запустив эту программу на исполнение, в консоли получим такой вывод:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    Страна: Россия  Столица: Москва
    Страна: Китай  Столица: Пекин
    Страна: Северная Корея  Столица: Пхеньян

    Также для перебора элементов можно использовать метод items. Этот метод возвращает набор кортежей. В каждом кортеже содержатся ключ и связанное с ним значение. Их мы сразу же можем записать в переменные key и value:

    for key, value in main_city.items():
        print(f"Страна: {key}  Столица: {value}")

    В результате получим такой же вывод, как и в прошлом примере. Также можно отдельно перебирать ключи с помощью метода keys:

    for key in main_city.keys():
        print(key)

    Результат:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    Россия
    Китай
    Северная Корея

    А при помощи метода values есть возможность отдельно перебрать значения элементов:

    for value in main_city.values():
        print(value)

    Вывод:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    Москва
    Пекин
    Пхеньян

    Дальше рассмотрим словари с более сложной структурой.

    Комплексные словари

    Рассмотрим следующий словарь, содержащий список планет земной группы:

    planets = {
        "Меркурий": {
            "Номер": "1",
            "Спутники": "Нет"
        },
        "Венера": {
            "Номер": "2",
            "Спутники": "Нет"
        },
        "Земля": {
            "Номер": "3",
            "Спутники": "Луна"
        },
        "Марс": {
            "Номер": "4",
            "Спутники": "Фобос, Деймос"
        }
    }

    Здесь мы видим словарь, значения элементов которого представляют собой тоже словари. Чтобы получить значение «Луна» нам потребуется два ключа:

    print(planets["Земля"]["Спутники"])

    Также можно использовать уже знакомый нам метод get:

    satellite = planets["Земля"].get("Спутники")
    
    print(satellite)

    Вывод в консоли будет таким:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    Луна

    Добавление и изменение элементов здесь происходит по тому же принципу, что мы рассматривали ранее во втором разделе этой публикации: если указанный элемент имеется, то он будет изменен, а если отсутствует, то будет добавлен. Добавим, например, для Марса указание группы, к которой принадлежит планета:

    planets["Марс"]["Группа"] = "Земная группа"
    
    print(planets)

    Результат:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    {'Меркурий': {'Номер': '1', 'Спутники': 'Нет'}, 'Венера': {'Номер': '2', 'Спутники': 'Нет'}, 'Земля': {'Номер': '3', 'Спутники': 'Луна'}, 'Марс': {'Номер': '4', 'Спутники': 'Фобос, Деймос', 'Группа': 'Земная группа'}}

    С удалением здесь тоже все довольно просто. Удалим, например, Венеру:

    del planets["Венера"]
    
    print(planets)

    Получим:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    {'Меркурий': {'Номер': '1', 'Спутники': 'Нет'}, 'Земля': {'Номер': '3', 'Спутники': 'Луна'}, 'Марс': {'Номер': '4', 'Спутники': 'Фобос, Деймос', 'Группа': 'Земная группа'}}

    Или же удалим у Венеры информацию о спутниках:

    del planets["Венера"]["Спутники"]
    
    print(planets)

    Вывод:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    {'Меркурий': {'Номер': '1', 'Спутники': 'Нет'}, 'Венера': {'Номер': '2'}, 'Земля': {'Номер': '3', 'Спутники': 'Луна'}, 'Марс': {'Номер': '4', 'Спутники': 'Фобос, Деймос', 'Группа': 'Земная группа'}}

    Далее предлагаем выполнить небольшое самостоятельное задание.

    Задание для самостоятельного выполнения

    Дана таблица:

    Название созвездия
    Альфа созвездия
    Дева
    Спика
    Эридан
    Ахернар
    Волопас
    Арктур
    Андромеда
    Альферац
    Кассиопея
    Шедар

    Требуется составить из этой таблицы словарь и дополнить его данными из нижеследующей таблицы:

    Название созвездия
    Альфа созвездия
    Персей
    Мирфак
    Лира
    Вега

    Далее нужно перебрать все элементы словаря и вывести их в консоль.

    Решение

    Пусть название созвездия будет ключом, а альфа созвездия значением. Тогда, исходя из данных первой таблицы, получим такой словарь:

    constellations = {"Дева": "Спика", "Эридан": "Ахернар", "Волопас": "Арктур", "Андромеда": "Альферац", "Кассиопея": "Шедар"}

    Теперь добавим в него данные из второй таблицы:

    constellations["Персей"] = "Мирфак"
    constellations["Лира"] = "Вега"

    Сделать это можно еще и вот так:

    constellations.update({"Персей": "Мирфак", "Лира": "Вега"})

    Осталось только перебрать элементы при помощи цикла for и вывести их в консоль:

    for key, value in constellations.items():
        print(f"Название созвездия: {key} Альфа созвездия: {value}")

    В результате получим:

    (env) alex@alex-pc:~/Projects/dict$ /home/alex/env/bin/python3 /home/alex/Projects/dict/dictionary.py
    Название созвездия: Дева Альфа созвездия: Спика
    Название созвездия: Эридан Альфа созвездия: Ахернар
    Название созвездия: Волопас Альфа созвездия: Арктур
    Название созвездия: Андромеда Альфа созвездия: Альферац
    Название созвездия: Кассиопея Альфа созвездия: Шедар
    Название созвездия: Персей Альфа созвездия: Мирфак
    Название созвездия: Лира Альфа созвездия: Вега

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии