Найти в Дзене
programmer's notes (python and more)

Основы программирования на языке Python. Приложение 2 к уроку 21. Словари

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Второе дополнение к уроку 21

Первое здесь

Словари в языке программирования Python (продолжение)

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

Наверное, возник вопрос о том, как удалять элементы из словаря. Ну, во-первых, можно, конечно просто очистить весь словарь с помощью метода clear(). Иногда это полезно, но чаще всего нас интересует удаление отдельных элементов (пар) словаря.

И так, первый способ удаления. Имеется метод pop(). Смотрим программу

dt = {3.14: 'Число Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}
print(dt.pop(3.14, None))
print(dt)

Результат

Число Пи
{2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}

И так:

1. С помощью pop() удаляется элемент словаря, ключ, которого указан первым аргументом.
2. Второй аргумент необязателен. Он нужен в том случае, если указанного в первом аргументе ключа не оказалось. Тогда
pop() просто возвращает второй аргумент.
3. Если второго аргумента нет и нужного ключа не оказалось, то генерируется ошибка. Чтобы перехватить ошибку, не позволив программе прерваться, следует использовать конструкцию
try...except, о которой мы будем говорить в следующем курсе по программированию на Python3.

О втором способе удаления, наверное вы уже догадались. Можно просто написать

del dc[key]

где dc - имя словаря, а key ключ.

Но здесь та же проблема, если ключа нет, то возникнет ошибка и программа прервется. И опять нас может выручить конструкция try...except.

Как и в случае с другими коллекция нужно аккуратно подходить к вопросу получения копии словаря. Продемонстрируем это на примере программы.

dt = {3.14: 'Число Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}
dd = dt
dc = dt.copy()
dt[3.14] = "Пи"
print(dt)
print(dc)
print(dd)

Результат выполнения программы

{3.14: 'Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}
{3.14: 'Число Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}
{3.14: 'Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}

И так, простое присвоение dd = dt не создает нового словаря. Просто для данного словаря появляется также и другое имя. Для того, чтобы получить копию словаря, нужно использовать метод copy() - метод не глубокого копирования. Оставим, пока обсуждение глубокого и не глубокого копирования на один из уроков. В большинстве случаем метода copy() нам достаточно.

Мы знаем, что для получения значения из словаря можно использовать просто dc[key], где dc имя словаря, key - ключ. Но здесь та же история, если ключа нет, то программа прерывает свою работу и нужно перехватывать это прерывание с помощью try...except. Но можно поступать проще, просто проверять наличие ключа. Смотрим

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

Еще один, имеющий отношение к получению значения по ключу. Этот метод setdefault(). Это метод имеет два аргумента, второй не обязателен. Работает он следующим образом.

1. Первым аргументом идет ключ. Если ключ в словаре существует, метод просто возвращает значение, не важно чему равен второй аргумент, или его вообще нет.
2. Если ключа нет, то тогда в словаре ключ создается. Значение для ключа берется из второго аргумента. Если второго аргумента нет, то значением будет
None.

Нельзя не упомянуть еще об одном способе изменения содержимого словаря. Это метод update(). Лучше всего пояснить, как работает метод на примере.

dt1 = {3.14: 'Число Пи', 2.71: 'Число e'}
dt2 = {3.14: 'Число Пи', 2.71: 'Число e'}
dt3 = {3.14: 'Число Пи', 2.71: 'Число e'}
dt1.update({'Число Пи': 3.14, 'Число e': 2.71})
print(dt1)
dt2.update(Число_Пи = 3.14, Число_e = 2.71)
print(dt2)
dt3.update([('Число Пи', 3.14), ('Число e', 2.71)])
print(dt3)

Результат выполнения программы

{3.14: 'Число Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}
{3.14: 'Число Пи', 2.71: 'Число e', 'Число_Пи': 3.14, 'Число_e': 2.71}{3.14: 'Число Пи', 2.71: 'Число e', 'Число Пи': 3.14, 'Число e': 2.71}

Как работает метод update() видно из программы. Но есть один нюанс. Он касается второго варианта изменения содержимого словаря. Второй вариант предполагает, что имена, стоящие слева от знака равенства не могут иметь пробелов. Мы заменили их знаками подчеркивания. Первый и второй подход, таким образом, ограничений не имеют.

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

sl = {'23': 3, '56': 600, '11': 123, 'qwertyy': '400'}
print(sorted(sl))

Результат выполнения фрагмента

['11', '23', '56', 'qwertyy']

Для словарей есть удобная возможность их объединения. Смотрим пример

dt1 = {1: 'qwe'}
dt2 = {4: 'as', 'rt': 4}
dt = dt1 | dt2 print(dt)      
                  

Результат выполнения
{1: 'qwe', 4: 'as', 'rt': 4}

На этом все. Будет еще урок по решению задач на словари и текстовое приложение к нему.

Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

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

#программирование #программисты #языки программирования #python