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

Ключевые моменты:

Композитный: элементы представлены в формате пары "ключ-значение". Ключ должен быть одноэлементным и уникальным. Значение может быть любого типа, такого как строка, целое число, список, словарь, набор и т. д.

Упорядоченный: до Python 3.7 он был неупорядоченным. Но начиная с версии Python 3.7 словари упорядочены.

Изменяемый: «значение» пары «ключ-значение» (элемент) может быть обновлено/изменено. Хотя «ключ» не может быть изменен.

Уникальный: ключ словаря должен быть уникальным.

  • Пример: my_first_dict = {‘python’:1 , ‘c’:2, ‘java’: 3}

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

Мы можем создать словарь, поместив пару ключ-значение в фигурные скобки {}, разделенные запятыми. Пример: my_dict = {‘math’:90,’science’:95}

Мы также можем использовать конструктор функции dict() для создания словаря Python. Пример: my_dict = dict((‘math’:90,’ 95)

Создание словаря с помощью {}

# Null dictionary using curly braces
dict_1 = {}
print("Empty dictionary using brace: ",dict_1)
# Define dictionary using curly braces
dict_2 = {'math':90, 'science':85, 'history':72}
print("Dictionary using brace: ",dict_2)

Вывод:

Empty dictionary using brace: {}
Dictionary using brace: {'math': 90, 'science': 85, 'history': 72}

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

# Define dictionary using dict() constructor
# Null dictionary using dict() function
dict_3 = dict()
print("Empty dictionary using dict(): ",dict_3)
# Define dictionary using dict()
dict_4 = {'AI':['nlp','ml'],'CS':['os','dbms']}
print("Dictionary using dict(): ",dict_4)

Вывод:

Empty dictionary using dict(): {}
Dictionary using dict(): {'AI': ['nlp', 'ml'], 'CS': ['os', 'dbms']}

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

Мы можем получить доступ к элементу словаря по «ключу» словаря, используя метод get() или внутри [] (квадратная скобка), поскольку «ключ» уникален.

• Если элемент не найден в словаре, метод get() возвращает None.

  • Если элемент не найден, то возникает KeyError ’, если мы используем [] (квадратная скобка).

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

# Accessing dictionary item using get() and []
subject_dict = {'math':90, 'science':85, 'history':72}
print(subject_dict['math'])
print(subject_dict.get('science'))

Вывод:

90
85

Если элемент не найден в словаре с помощью [], то выдается KeyError.

# Accessing dictionary item using []
subject_dict = {'math':90, 'science':85, 'history':72}
print(subject_dict['english'])

Вывод:

Traceback (most recent call last):
File "DICTIONARY.py", line 10, in <module>
      print(subject_dict['english'])
KeyError: 'english'

Если элемент не найден в словаре с помощью get(), он возвращает None.

subject_dict = {'math':90, 'science':85, 'history':72}
print(subject_dict.get('english'))

Вывод:

None

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

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

• Если ключа нет в словаре, то ключ добавляется как новый элемент.

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

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

# Add item
subject_dict = {'math':90, 'science':85, 'history':72}
subject_dict["english"]=87
print(subject_dict)

Вывод:

{'math': 90, 'science': 85, 'history': 72, 'english': 87}

Обновить элемент

# Update item
subject_dict = {'math':90, 'science':85, 'history':72,"english":87}
print("Before update: ",subject_dict)
subject_dict["english"]=93
print("After update: ",subject_dict)

Вывод:

Before update: {'math': 90, 'science': 85, 'history': 72, 'english': 87}
After update: {'math': 90, 'science': 85, 'history': 72, 'english': 93}

Удалить элементы и удалить словарь

Удалить отдельный элемент

•pop(): этот метод может удалить элемент с предоставленным ключом и вернуть значение.

•popitem(): этот метод удаляет произвольный элемент (пару ключ-значение) и возвращает его.

Удаление всех элементов

•clear(): используется для удаления всех элементов из словаря.

Удалить сам словарь

•del(): метод del() используется для удаления самого словаря из памяти.

Код для удаления элементов и удаления словаря

subject_dict = {'math':90, 'science':85, 'history':72}
# Remove item using pop
print("output1: ",subject_dict.pop("history"))
# Remove item using popitem()
print("output2: ",subject_dict.popitem())
# Remove all the items
print("output3: ",subject_dict.clear())
#delete the dictionary
del subject_dict
print("\noutput4: ",subject_dict)

Вывод:

output1: 72
output2: ('science', 85)
output3: None
Traceback (most recent call last):
       File "DICTIONARY.py", line 22, in <module>
print("output4: ",subject_dict)
NameError: name 'subject_dict' is not defined

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

Словарь Python использует внутреннюю хеш-таблицу.

• Изначально словарь создается с 8 сегментами. Если 2/3 сегментов заполнены, то выделяются новые сегменты, удваивая количество текущих сегментов.

• Каждое ведро состоит из хэш-кода и пары ключ-значение.

• Хэш-функция использует открытое зондирование для разрешения коллизий.

  • Поскольку используется хеш-таблица, словарь Python действует как индекс. Таким образом, доступ к элементу занимает O (1), т.е. постоянное время.

Некоторые полезные словарные методы

values(): возвращает все значения словаря. Синтаксис:dict_name.values()

Keys(): возвращает все ключи словаря. Синтаксис:dict_name.keys

fromkeys(): создайте словарь, указав список ключей и инициализировав его одним значением. Синтаксис:dict_name.fromkeys keys,value

Заключение

Словарь — один из самых удобных инструментов (структур данных) в языке программирования Python. Его временная сложность составляет O (1), поскольку он использует хеш-карту. Так что вполне эффективно. Когда необходимо сохранить значения, соответствующие какому-либо объекту, можно использовать Словарь.

И вот оно. Спасибо за прочтение.

Больше контента на plainenglish.io