Словари в Python: методы, функции и операции с ними

В данной статье мы рассмотрим словари в Python. Это еще один вид встроенных типов данных в Python.

Кроме того, мы изучим, как создавать, получать доступ к данным, удалять и переопределять словари в Python. Наряду с этим мы изучим встроенные методы и операции со словарями.

Итак, приступим!

Что такое вообще словари в Python

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

Давайте сначала посмотрим как его можно создать.

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

Создать словарь в Python проще пареной репы. Разделим пару ключ-значение двоеточием ‘:‘, каждую пару отделим друг от друга запятыми ‘,‘ и все это поместим в фигурные скобки ‘{}‘.

{'PB&J':'Peanut Butter and Jelly','PJ':'Pajamas'}

# Результат:
# {‘PB&J’: ‘Peanut Butter and Jelly’, ‘PJ’: ‘Pajamas’}

Словарь также можно сохранить в переменную. Если вы планируете его использовать в дальнейшем, это нужно обязательно сделать.

lingo = {'PB&J':'Peanut Butter and Jelly','PJ':'Pajamas'}

Пустой словарь можно создать при помощи фигурных скобок следующим образом:

dict2={}
dict2

# Результат:
# {}

type(dict2)

# Результат:
# <class ‘dict’>

Генераторы словарей в Python

Также можно создать словарь при помощи генератора словарей.

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

mydict = {x*x:x for x in range(8)}
mydict

# Результат:
# {0: 0, 1: 1, 4: 2, 9: 3, 16: 4, 25: 5, 36: 6, 49: 7}

В данном коде мы создали словарь где ключами являются квадраты чисел от 0 до 7, а значениями сами эти числа.

Словари с ключами и значениями различных типов данных

Тип данных ключей и значений совсем не обязательно должен быть одинаковым. Все ключи и значения могут иметь свой тип данных.

dict3 = {1:'carrots','two':[1,2,3]}
dict3

# Результат:
# {1: ‘carrots’, ‘two’: [1, 2, 3]}

Как видно из данного кода, все типы данных ключей и значений различны.

Функция dict()

При помощи функции dict() можно преобразовать некоторые подходящие конструкции списков и кортежей в словарь.

dict(([1,2],[2,4],[3,6]))

# Результат:
# {1: 2, 2: 4, 3: 6}

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

dict([1,2],[2,4],[3,6])

Результат:

Traceback (most recent call last):File “<pyshell#121>”, line 1, in <module>

dict([1,2],[2,4],[3,6])

TypeError: dict expected at most 1 arguments, got 3

Объявление ключа более одного раза

Теперь давайте попробуем объявить один ключ более одного раза и посмотрим, что произойдет.

mydict2 = {1:2,1:3,1:4,2:4}
mydict2

# Результат:
# {1: 4, 2: 4}

Как можно заметить, пару 1:2 сначала заменили на 1:3, а затем на 1:4. Это показывает нам, что словарь не может содержать один и тот же ключ дважды.

Объявляем пустой словарь, а затем добавляем туда элементы

Если вы не знаете, какие пары ключ-значение должны входить в ваш словарь Python, то можете просто создать пустой словарь и добавить пары позже.

animals={}
type(animals)

# Результат:
# <class ‘dict’>

animals[1]='dog'
animals[2]='cat'
animals[3]='ferret'
animals

# Результат:
# {1: ‘dog’, 2: ‘cat’, 3: ‘ferret’}

Как получить доступ к словарю Python?

Доступ ко всему словарю Python сразу

Чтобы получить сразу весь словарь, введите его название в оболочке Python.

dict3

# Результат:
# {1: ‘carrots’, ‘two’: [1, 2, 3]}

Доступ к значениям словаря

Чтобы получить доступ к элементу из списка или кортежа, мы используем его индекс в квадратных скобках. Это обычный синтаксис Python, которому нужно следовать. Однако словарь в Python fake geneva watches неупорядочен. Таким образом, чтобы получить его значение, вместо индекса в квадратные скобки нужно поместить ключ от этого значения.

Рассмотрим созданный нами ранее словарь mydict. Чтобы получить значение по ключу 36 напишем:

mydict[36]

# Результат:
# 6

Метод get()

Метод get() словаря Python принимает ключ в качестве аргумента и возвращает соответствующее значение.

mydict.get(49)

# Результат:
# 7

Если такого ключа словаря Python не существует

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

mydict[48]

Результат:

Traceback (most recent call last):File “<pyshell#125>”, line 1, in <module>

mydict[48]

KeyError: 48

Использование ключа в квадратных скобках дает нам KeyError. Теперь посмотрим, что вернет метод get() в такой же ситуации.

mydict.get(48)

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

print(mydict.get(48))

# Результат:
# None

Таким образом, можно заметить, что метод get() вернул нам значение None. Что означает отсутствие какого-либо значения.

Переопределение словаря Python

Словари в Python являются изменяемым видом данных. Это означает, что мы elf bar wegwerp vape bc 5000 puffs ananas kokosnootijs можем изменить словарь или добавить новые элементы в него без необходимости переопределять весь словарь целиком.

Обновление значения по существующему ключу

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

Давайте для иллюстрации этого создадим новый словарь:

dict4={1:1,2:2,3:3}

А теперь попробуем обновить значение ключа 2.

dict4[2] = 4
dict4

# Результат:
# {1: 1, 2: 4, 3: 3}

Добавление нового ключа

Однако, если данный ключ еще не существует в словаре, он будет автоматически в него добавлен.

dict4[4]=6
dict4

# Результат:
# {1: 1, 2: 4, 3: 3, 4: 6}

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

Как удалить словарь?

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

Удаление словаря целиком

Чтобы удалить полностью словарь достаточно поместить его имя после команды del.

del dict4
dict4

Результат:

Traceback (most recent call last):File “<pyshell#138>”, line 1, in <module>

dict4

NameError: name ‘dict4’ is not defined

Удаление отдельной пары ключ-значение

Для удаление из словаря только одной пары ключ-значение также можно использовать команду del. Только в этом случае после имени словаря должен быть указан ключ в квадратных скобках.

Давайте для этого примера заново создадим массив dict4.

dict4={1:1,2:2,3:3,4:4}

А теперь удалим из него пару ключ-значение 2 : 2.

del dict4[2]
dict4

# Результат:
# {1: 1, 3: 3, 4: 4}

Также для удаления элементов из словаря существует несколько встроенных методов, но о них мы расскажем позднее.

Встроенные функции для работы со словарями в Python

Функции это такие процедуры, которые можно применить к определенной конструкции для получения результата. Причем сама конструкция при этом останется неизменной. В Python есть несколько функций, которые мы можем применить к словарям.

Функция len()

Функция len() возвращает длину словаря в Python. Каждая пара ключ-значение считается как единица.

len(dict4)

# Результат:
# 3

Пустой словарь имеет длину 0.

Функция any()

Как и в случае со списками и кортежами, функция any() возвращает True, если хотя бы один ключ в словаре имеет логическое значение True.

any({False:False,'':''})

# Результат:
# False

any({True:False,"":""})

# Результат:
# True

Функция all()

В отличие от функции any(), функция all() возвращает значение True, только если все ключи в словаре имеют логическое значение True.

all({1:2,2:'',"":3})

# Результат:
# True

Функция sorted()

Как и в случае со списками и кортежами, функция sorted() возвращает отсортированную последовательность ключей в словаре. Сортировка по умолчанию осуществляется в порядке возрастания и не изменяет исходный словарь Python.

Но чтобы увидеть эффект, давайте сначала изменим наш словарь dict4.

dict4={3:3,1:1,4:4}

Теперь применим к нему функцию sorted().

sorted(dict4)

# Результат:
# [1, 3, 4]

Теперь давайте снова распечатаем наш словарь.

dict4

# Результат:
# {3: 3, 1: 1, 4: 4}

Как можно заметить, наш словарь остался неизменным.

Функция sorted() возвращает отсортированный список ключей словаря. Чтобы это доказать, используем функцию type().

type(sorted(dict4))

# Результат:
# <class ‘list’>

Таким образом, мы видим, что был возвращен список.

Встроенные методы для работы со словарями Python

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

Для примеров будем использовать созданный ранее словарь dict4.

dict4

# Результат:
# {3: 3, 1: 1, 4: 4}

Метод keys()

Метод keys() возвращает список ключей словаря.

dict4.keys()

# Результат:
# dict_keys([3, 1, 4])

Метод values()

Аналогичным образом, метод values() возвращает список значений словаря.

dict4.values()

# Результат:
# dict_values([3, 1, 4])

Метод items()

Данный метод возвращает список пар ключ-значение.

dict4.items()

# Результат:
# dict_items([(3, 3), (1, 1), (4, 4)])

Метод get()

Мы уже ранее встречались с этим методом. Теперь давайте рассмотрим его более подробно.

Он принимает от одного до двух аргументов. Первый аргумент – это ключ для поиска значения, а второй аргумент определяет, что будет возвращено, если ключ не будет найден.

Значение второго аргумента по умолчанию None.

dict4.get(3,0)

# Результат:
# 3

dict4.get(5,0)

# Результат:
# 0

Так как ключ 5 в словаре отсутствует, было возвращено значение 0.

Метод clear()

Назначение метода clear() очевидно. Он очищает словарь Python.

dict4.clear()
dict4

# Результат:
# {}

Для дальнейших примеров мы создадим словарь dict4 еще раз.

dict4={3:3,1:1,4:4}

Метод copy()

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

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

Метод copy() осуществляет поверхностное копирование словаря Python.

newdict=dict4.copy()
newdict

# Результат:
# {3: 3, 1: 1, 4: 4}

Метод pop()

Vетод pop() удаляет элемент словаря и отображает на экране значение удаляемого элемента. Данный метод принимает от одного до двух элементов. Первый аргумент – это ключ удаляемого значения, а второй аргумент определяет, что будет возвращено если указанный ключ не будет найден.

newdict.pop(4)

# Результат:
# 4

Теперь давайте попробуем удалить пару с несуществующим ключом 5.

newdict.pop(5,-1)

# Результат:
# -1

Однако, в отличие от метода get(), здесь нет значения None по умолчанию для второго параметра.

newdict.pop(5)

Результат:

Traceback (most recent call last):File “<pyshell#191>”, line 1, in <module>

newdict.pop(5)

KeyError: 5

Как можно увидеть, в таком случае была вызвана ошибка KeyError.

Метод popitem()

Для начала давайте создадим новый словарь в переменной newdict.

newdict={3:3,1:1,4:4,7:7,9:9}

Теперь применим к данному объекту метод popitem().

newdict.popitem()

# Результат:
# (9, 9)

Как можно заметить, этот метод извлек из словаря пару 9 : 9.

Теперь давайте перезапустим код и посмотрим на результат.

newdict={3:3,1:1,4:4,7:7,9:9}
newdict.popitem()

# Результат:
# (9, 9)

Как можно заметить, опять была извлечена та же пара. Из этого можно сделать вывод, что внутренняя логика метода popitem() такова, что для определенного словаря он всегда извлекает пары в одном и том же порядке.

Метод fromkeys()

Этот метод создает новый словарь Python на основе уже существующего. Для примера попробуем создать новый словарь из словаря newdict.

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

newdict.fromkeys({1,2,3,4,7},0)

# Результат:
# {1: 0, 2: 0, 3: 0, 4: 0, 7: 0}

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

newdict.fromkeys((1,2,3,4,7),0)

# Результат:
# {1: 0, 2: 0, 3: 0, 4: 0, 7: 0}

Значением по умолчанию для второго аргумента является значение None.

newdict.fromkeys({'1','2','3','4','7'})

# Результат:
# {‘4’: None, ‘7’: None, ‘3’: None, ‘1’: None, ‘2’: None}

Метод update()

Метод update() принимает в качестве аргумента другой словарь. Затем он обновляет словарь, добавляя в него значения из другого словаря, которых еще нет.

dict1={1:1,2:2}
dict2={2:2,3:3}
dict1.update(dict2)
dict1

# Результат:
# {1: 1, 2: 2, 3: 3}

Операции со словарями Python

А сейчас давайте рассмотрим какие операции можно производить со словарями Python.

Операция включения

Мы можем применить операторы in и not in к словарю Python, чтобы проверить, содержит ли он определенный ключ.

Для примера мы будем работать со словарем dict1.

dict1

# Результат:
# {1: 1, 2: 2, 3: 3}

2 in dict1

# Результат:
# True

4 in dict1

# Результат:
# False

Ключ 2 есть в словаре dict1, а ключа 4 в нем нет. Соответственно, в первом случае мы получили результат True, а во втором False.

Итерация словарей Python

При помощи цикла for можно осуществлять итерацию словаря Python точно также как итерацию списка, множества или кортежа.

dict4

# Результат:
# {1: 1, 3: 3, 4: 4}

for i in dict4:
  print(dict4[i]*2)

# Результат:
# 2
# 6
# 8

Приведенный выше код умножает каждое значение словаря на 2 и выводит его на экран.

Вложенные словари

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

dict1={4:{1:2,2:4},8:16}
dict1

# Результат:
# {4: {1: 2, 2: 4}, 8: 16}

Чтобы получить значение для ключа 4, напишем следующий код:

dict1[4]

# Результат:
# {1: 2, 2: 4}

Однако, использовать словари в качестве ключа нельзя, будет выдана ошибка.

dict1={{1:2,2:4}:8,8:16}

Результат:

Traceback (most recent call last):File “<pyshell#227>”, line 1, in <module>

dict1={{1:2,2:4}:8,8:16}

TypeError: unhashable type: ‘dict’

Итак, на этом пока всё о словарях Python. Мы надеемся, что вам понравились наши объяснения.

Вопросы из интервью по словарям Python

  1. Что такое словари в языке Python?
  2. Как можно вызвать словарь в Python?
  3. Объясните работу словарей в Python.
  4. Как прочитать содержимое словаря в Python?
  5. Как создать пустой словарь в Python?

Заключение

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

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

Наконец, мы узнали о вложенных словарях и о том, как итерировать словари Python при помощи цикла. Если у вас остались вопросы, не стесняйтесь, пишите их в комментариях.

Перевод статьи  Python Dictionary with Methods, Functions and Dictionary Operations.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll to Top