29. Методы словарей и функция len() в Python
Оглавление урока
Введение
В уроке 7.5. разобрались с внутренним устройством словарей и научились их сортировать. Вы уже неплохо разбираетесь в методах списков и знаете пару основных методов словарей. Давайте углубим знания и познакомимся с оставшимися основными методами словарей и общей для всех итерируемых объектов функцией len()
.
Методы словарей в Python
Если вы забыли, как создаются словари, добавляются элементы и как к ним обращаются в Python, вернитесь к уроку 7.1. на пару секунд, чтобы освежить знания. Для начала создадим словарь:
numbers = {'One': 1, 'Two': 2, 'Four': 4, 'Three': 3}
Чтобы удалить элемент из словаря, вы можете использовать ключевое слово del
, после которого указывается имя словаря и в квадратных скобках ключ, который требуется удалить.
del numbers['One']
Так же удалить элемент можно при помощи метода pop()
, который удаляет ключ и возвращает значение:
numbers.pop('One') # => 1
Если ключа не существует, то будет выброшено исключения KeyError
. Про исключения поговорим в уроке 10.5. Метод pop()
имеет второй необязательный параметр, который будет возвращаться, если ключа не существует. Например, выведем слово Empty
, если такого ключа нет:
numbers.pop('Five', 'Empty')
На метод pop()
похож метод get()
, который просто возвращает значение элемента по указанному ключу или None
, если такого ключа не существует. В отличие от метода pop()
, метод get()
не удаляет элемент и не выбрасывает исключения, если ключ отсутствует. Во второй необязательный параметр метода get()
можно указать возвращаемое значение, в случае отсутствия ключа, вместо стандартного значения None
.
numbers = {'One': 1, 'Two': 2, 'Four': 4, 'Three': 3}
numbers.get('Five', 'Empty') # => Empty
Есть метод popitem()
, который удаляет последний элемент в словаре и возвращает кортеж из двух элементов: ключа и значения:
numbers.popitem() # => ('Three', 3)
Вернемся к ключевому слову del
. При помощи его можно удалить не только ключ, но и весь словарь.
del numbers
print(numbers)
Не путайте понятия «удалить» и «очистить». После удаления словаря и попытке к нему обратиться (в примере выше, напечатать его) поднимется исключение NameError
(поговорим о них позднее).
Чтобы очистит словарь, то есть удалить все элементы в нем, используйте метод clear()
.
numbers.clear()
Помните, в уроке 2.3. про типы данных и переменные мы говорили, что при присваивании одной переменной другой, копируется не значение, а ссылка. То есть если вы хотите создать новый словарь и скопировать элементы из старого таким образом:
numbers = {'One': 1, 'Two': 2, 'Four': 4, 'Three': 3}
a = numbers
a['One'] = 5
numbers # => {'One': 5, 'Two': 2, 'Four': 4, 'Three': 3}
При изменении элементов нового словаря, вы будете менять на самом деле элементы старого словаря. Чтобы такого не происходило, используйте метод copy()
:
a = numbers.copy()
Иногда из имеющегося итерируемого объекта, например, кортежа или списка, вам необходимо сделать словарь. Это можно сделать при помощи метода fromkeys()
, который принимает два параметра: итерируемый объект (например, кортеж) и необязательный параметр, который является значением по умолчанию для каждого ключа:
name = ('Иванов', 'Петров', 'Сидоров')
age = 30
dict_name = dict.fromkeys(name, age)
dict_name # => {'Иванов': 30, 'Петров': 30, 'Сидоров': 30}
С методом setdefault()
вы уже познакомились в уроке 7.1, поэтому можете вернуться, чтобы его вспомнить.
Для обновления словаря, то есть добавления новых элементов и перезаписи уже имеющихся ключей, существует метод update()
, который не возвращает новый словарь, а перезаписывает тот, к которому применен:
numbers = {'One': 1, 'Two': 2, 'Four': 4, 'Three': 3}
numbers_new = {'One': 6, 'Five': 5}
numbers.update(numbers_new) # => None
numbers # => {'One': 6, 'Two': 2, 'Four': 4, 'Three': 3, 'Five': 5}
Функция len()
До этого момента мы ни разу не говорили про функцию len()
, которая возвращает количество элементов в итерируемом объекте (строка, список, словарь и т.д.):
# словарь
d = {4: 5, 1: 1, 3: 12, 2: 3}
len(d) # => 4
# строка
s = "Hello"
len(s) # => 5
Как вариант (не самый лучший, конечно), функцию len()
можно использовать в конструкции for
для перебора элементов:
s = "Hello"
for i in range(len(s)):
print(s[i])
В этом уроке мы познакомились с оставшимися, ранее не затронутыми, методами словарей в Python и впервые узнали о функции len() для подсчета количества элементов в итерируемых объектах.