Дикий Григорий

Full-stack веб-разработчик

Словари и множества в Python

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

Словарь

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

variable = {key1 : value1, key2 : value2}

Словарь, в отличии от кортежа, изменяемая структура данных. В языку C++ такая структура носит название ассоциативного массива. В качестве ключей могут выступать не только строки, но также простые объекты как изменяемые, так и неизменяемые.

Словари имеют следующие методы:

  • clear() - происходит очистка словаря
  • copy() - метод возвращает копию данного словаря
  • get(key[, default]) - ищет по ключу и возвращает найденный элемент и если его нет, то возвращает None
  • items() - возвращает пары (ключ, значение).
  • keys() - возвращает ключи словаря.
  • values() - возвращает значения словаря.
  • update([other]) - слияние словарей
  • pop(key) - удаление элемента словаря
>>> d = {}
>>> d['one'] = 1
>>> d['two'] = 2
>>> d
{'two': 2, 'one': 1}
>>> d.update({'three': 3, 'four': 4})
>>> d
{'two': 2, 'four': 4, 'three': 3, 'one': 1}

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

>>> d.items()
dict_items([('two', 2), ('four', 4), ('three', 3), ('one', 1)])
>>> d.keys()
dict_keys(['two', 'four', 'three', 'one'])
>>> d.values()
dict_values([2, 4, 3, 1])
>>> 'two' in d
True
>>> 2 in d
False

Как видно итерацию можно проводить по ключам, по значениям или по словарю в целом. Давайте рассмотрим примеры итераций.

>>> for key, value in d.items():
...    key
... 
'two'
'four'
'three'
'one'
>>> for key, value in d.items():
...   value
... 
2
4
3
1

Также элементы словаря можно удалять:

>>> del d['four']
>>> d
{'two': 2, 'three': 3, 'one': 1}
>>> d.clear()
>>> d
{}

Множества

Множества в Python - это неупорядоченные наборы простых объектов, которые не дублируются. Они в основном нужны для проверки на вхождение элементов, а также помогают избавляться от дублирования элементов. Для создания множества используются фигурные скобки {}. Стоит отметить, что пустое множество создается при помощи set() так, как пустые фигурные скобки используются для словаря.

Множества поддерживают богатый ассортимент методов и операций:

  • set1.union(set2 ...) - объединение нескольких множеств. Альтернативное использование: set1 | set2 |
  • set1.intersection(set2, ...) - пересечение. Альтернативное использование: set & set2 &
  • set1.difference(set2, ...) - множество из всех элементов set, не принадлежащие ни одному из other. Альтернативное использование: set1 - set2
  • set1.symmetric_difference(set2) - множество элементов, встречающихся в одном множестве, но не встречающиеся в обоих множествах. Альтернативное использование: set1 ^ set2
  • set1.isdisjoint(set2) - возвращает истину, если set и other не имеют общих элементов.
  • set1 == set2 - возвращает истину, если множества полностью одинаковы
  • set1.issubset(set2) - все элементы set1 находятся и во множестве set2. Альтернативное использование: set1 <= set2
  • set1.issuperset(set2) - все элементы set2 находятся во множестве set1. Альтернативное использование: set1 >= set2
  • set.copy() - возвращается копия множества.

Операции которые изменяют само множество:

  • set1.update(set2, ...) - объединение. Альтернативное использование: set1 |= set2 | ..
  • set1.intersection_update(set2, ...) - пересечение. Альтернативное использование: set1 &= set2 & ...
  • set1.difference_update(set2, ...) - вычитание. Альтернативное использование: set1 -= set2 | ...
  • set1.symmetric_difference_update(set2) - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих множествах. Альтернативное использование: set1 ^= set2
  • set.add(elem) - добавление в множество
  • set.remove(elem) - удаление из множества, если его нет, то возбуждается исключение KeyError
  • set.discard(elem) - удаляет элемент, если он находится в множестве.
  • set.pop() - удаляет первый элемент из множества, но следует помнить, что множества, как и словари неупорядоченные и точно узнать что удалится невозможно.
  • set.clear() - очищаем множество.

Посмотрим на использование множеств:

>>> s = set('hello bro')
>>> s
{'b', 'l', 'o', ' ', 'r', 'e', 'h'}
>>> s2 = set('hello reader')
>>> s2
{'l', 'o', 'a', 'd', ' ', 'r', 'e', 'h'}
>>> s3 = s | s2
>>> s3
{'b', 'l', 'o', 'a', 'd', ' ', 'r', 'e', 'h'}
>>> s3 >= s2
True
>>> s3 <= s2
False
>>> s2 - s
{'a', 'd'}
>>> s - s2
{'b'}
>>> s2 & s
{'l', 'o', ' ', 'r', 'e', 'h'}