Словари в Python

Одним из наиболее важных составных типов данных в Python является словарь. Это коллекция, в которой данные хранятся в виде пар ключ-значение {key:value}. Сегодня мы поговорим именно про словари в Python. Обсудим, что они из себя представляют и как над ними выполнять операции CRUD (Create, Read, Update, Delete – Создание, Чтение, Модификация, Удаление).

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

В этой статье:

Отлично! Теперь давайте познакомимся со словарями поближе!

Как создать словарь в Python

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

Мы можем определить словарь, заключив разделенный запятыми список пар ключ-значение в фигурные скобки {}.

my_dict = {
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
}

В приведенном выше примере Name, Roll и Subjects являются ключами словаря my_dict. Ashutosh Krishna, 23 и ["OS", "CN", "DBMS"] являются их соответствующими значениями.

Мы также можем объявить словарь с помощью встроенной функции dict(). К примеру, это можно сделать следующим образом:

my_dict = dict({
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
})

Для такого задания словаря хорошо подойдет список кортежей:

my_dict = dict([
    ("Name", "Ashutosh Krishna"), 
    ("Roll", 23),
    ("Subjects", ["OS", "CN", "DBMS"])
])

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

my_dict = dict(
    Name="Ashutosh Krishna", 
    Roll=23, 
    Subjects=["OS", "CN", "DBMS"]
)
[python_ad_block]

Как получить доступ к значениям словаря в Python

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

my_dict = {
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
}

print(my_dict[1])

Если вы попытаетесь сделать это, ваш код выдаст ошибку KeyError:

# Traceback (most recent call last):
#   File "C:\Users\ashut\Desktop\Test\hello\test.py", line 7, in <module>
#     print(my_dict[1])
# KeyError: 1

Обратите внимание, что исключение называется KeyError. Означает ли это, что к значениям словаря можно получить доступ с помощью ключей? Да, вы всё правильно поняли!

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

>>> my_dict['Name']          
'Ashutosh Krishna'
>>> my_dict['Subjects'] 
['OS', 'CN', 'DBMS']

Если ключ не существует в словаре, мы получаем все то же исключение KeyError:

>>> my_dict['College']  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'College'

Но мы также можем избежать этой ошибки, используя функцию get(). Это будет выглядеть следующим образом:

>>> my_dict.get('College')
>>> 

Если ключ существует в словаре, мы получим соответствующее значение. А если такого ключа нет, то код не выдаст нам ошибку.

Как обновить словарь в Python

Словари изменяемы. Это означает, что они могут быть изменены после создания. Мы можем добавить новую пару ключ-значение или изменить уже существующие пары.

Добавить новый элемент в словарь довольно просто с помощью оператора присваивания. К примеру, это можно сделать так:

>>> my_dict['College'] = 'NSEC'
>>> my_dict                    
{'Name': 'Ashutosh Krishna', 'Roll': 23, 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC'}

Если ключ уже присутствует в словаре, программа обновит его значение.

>>> my_dict['Roll'] = 35
>>> my_dict
{'Name': 'Ashutosh Krishna', 'Roll': 35, 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC'}

Как обновить словарь с помощью метода update()

Мы также можем обновить словарь с помощью встроенного метода update():

>>> my_dict
{'Name': 'Ashutosh Krishna', 'Roll': 35, 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC'}
>>> another_dict = {'Branch': 'IT'}
>>> my_dict.update(another_dict)
>>> my_dict
{'Name': 'Ashutosh Krishna', 'Roll': 35, 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC', 'Branch': 'IT'}
>>>

Метод update() принимает либо словарь, либо итерируемый объект, состоящий из пар ключ-значение (обычно это кортежи). Кроме того, можно прописать значение для ключевого слова, как в следующем примере:

>>> my_dict.update(Branch='CSE') 
>>> my_dict
{'Name': 'Ashutosh Krishna', 'Roll': 35, 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC', 'Branch': 'CSE'}

От редакции Pythonist. Также рекомендуем статью «Как объединить словари в Python».

Как удалить элементы из словаря в Python

Есть несколько способов удалить элементы из словаря в Python.

Как удалить элемент словаря с помощью метода pop()

Мы можем удалить конкретный элемент словаря с помощью метода pop(). Этот метод удаляет элемент с указанным ключом и возвращает удаленное значение. Например, это можно сделать следующим образом:

>>> roll = my_dict.pop('Roll') 
>>> roll
35
>>> my_dict
{'Name': 'Ashutosh Krishna', 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC', 'Branch': 'CSE'}

Как удалить элемент словаря с помощью метода popitem()

popitem() удаляет последнюю пару ключ-значение и возвращает ее в виде кортежа. Это выглядит так:

>>> my_dict.popitem()
('Branch', 'CSE')
>>> my_dict
{'Name': 'Ashutosh Krishna', 'Subjects': ['OS', 'CN', 'DBMS'], 'College': 'NSEC'}

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

Вы можете использовать ключевое слово del для удаления определенной пары ключ-значение {key:value} или даже всего словаря. Ключевое слово del работает следующим образом:

>>> del my_dict['Subjects'] 
>>> my_dict
{'Name': 'Ashutosh Krishna', 'College': 'NSEC'}
>>> del my_dict
>>> my_dict
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'my_dict' is not defined

Как удалить элемент словаря с помощью метода clear()

Метод clear() очищает все пары ключ-значение {key:value} в словаре. Это делается вот так:

>>> my_dict
{'Name': 'Ashutosh Krishna', 'Roll': 23, 'Subjects': ['OS', 'CN', 'DBMS']}
>>> my_dict.clear()
>>> my_dict
{}

Обратите внимание, что после вызова метода clear() вывод словаря с помощью print() не приводит к ошибке, поскольку метод clear() не удаляет сам словарь, а лишь очищает его от всех значений. В то время как ключевое слово del именно удаляет словарь. Вот почему в предыдущем случае мы получили NameError.

Словарные операторы и встроенные функции

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

Функция len()

Функция len() возвращает количество пар ключ-значение, имеющихся в заданном словаре. К примеру, мы можем использовать функцию len() следующим образом:

>>> my_dict
{'Name': 'Ashutosh Krishna', 'Roll': 23, 'Subjects': ['OS', 'CN', 'DBMS']}
>>> len(my_dict)
3

Функция sorted()

Функция sorted() сортирует элементы заданного итерируемого объекта в определенном порядке (по возрастанию или по убыванию) и возвращает их в виде списка. Принцип работы данной функции показан ниже:

>>> sorted(my_dict)
['Name', 'Roll', 'Subjects']

Оператор in

Вы можете использовать оператор in, чтобы проверить, присутствует ли ключ в словаре. Это позволит вам избежать ошибок при вызове несуществующих ключей. Пример использования оператора in:

>>> 'Roll' in my_dict
True
>>> 'College' in my_dict
False

Встроенные словарные методы

Для словарей в Python доступны различные встроенные методы. Ранее мы уже обсуждали некоторые из них, такие как clear(), pop() и popitem(). Давайте рассмотрим еще несколько.

МетодОписание
clear()Удаляет все элементы из словаря
copy()Возвращает копию словаря
fromkeys(seq[, v])Возвращает новый словарь с ключами из seq и значением, равным v (по умолчанию None)
get(key[,d])Возвращает значение по заданному ключу. Если ключ не существует, возвращает d (по умолчанию None)
items()Возвращает новый объект, содержащий элементы словаря в формате (ключ, значение)
keys()Возвращает новый объект, содержащий ключи словаря
pop(key[,d])Удаляет элемент по ключу и возвращает его значение или d, если ключ не найден. Если d не указан и ключ не найден, возникает KeyError
popitem()Удаляет и возвращает элемент (пару ключ, значение), добавленный в словарь последним. До Python 3.7 удалялся и возвращался произвольный элемент. Вызывает KeyError, если словарь пуст
setdefault(key[,d])Возвращает соответствующее значение, если ключ находится в словаре. Если нет, вставляет ключ со значением d и возвращает d (по умолчанию None)
update([other])Обновляет словарь парами ключ-значение из other, перезаписывая существующие ключи
values()Возвращает новый объект, содержащий значения словаря

Как перебирать словарь

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

my_dict = {
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
}

for item in my_dict:
    print(item)

# Output:
# Name
# Roll
# Subjects

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

Как перебирать словарь с помощью метода items()

Когда мы используем метод items() для перебора словаря, он возвращает нам кортеж из ключа и значения на каждой итерации. Таким образом мы можем напрямую получить ключ и значение. Сделать это можно следующим способом:

my_dict = {
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
}

for key, value in my_dict.items():
    print(key, value)

Вот наш результат:

Name Ashutosh Krishna
Roll 23
Subjects ['OS', 'CN', 'DBMS']

Важно отметить, что в цикле for следует указать две переменных через запятую. В данном случае мы использовали key и values, однако можно использовать любые имена. К примеру, for i, j или for first, second – насколько вам хватит фантазии.

Как перебирать словарь с помощью keys()

В этом случае мы получаем только ключи на каждой итерации. Выглядит это так:

my_dict = {
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
}

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

Запустите данный код, и вы получите следующее:

Name
Roll
Subjects

Как перебирать словарь с помощью values()

При использовании values() в цикле for мы получаем значения словаря. Делается это так:

my_dict = {
    "Name": "Ashutosh Krishna",
    "Roll": 23,
    "Subjects": ["OS", "CN", "DBMS"]
}

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

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

Ashutosh Krishna
23
['OS', 'CN', 'DBMS']

Заключение

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

Успехов в написании кода!

Перевод статьи «Python Dictionary – How to Perform CRUD Operations on dicts in Python».