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

24 Окт 2020 , 480

В этой статье мы рассмотрим одну из основных структур данных в Python, которая используется повсеместно. Как вы догадались по заголовку статьи - это словари(dict).

Знания как устроен словарь и знание основных методов работы с ним поможет нам писать более понятный и высококачественный код. В этой статье мы покажем как создавать словарь, как добавлять новые элементы , как перебрать словарь , как объединить словари и много других методов. Также мы рассмотрим какие изменения со словарем произошли при развитии Python.

Во многих статьях в интернете , вы могли увидеть определение словаря , где говорится , что словари - это неупорядоченный набор пар "ключ-значение". Это утверждение было справедливым до версии Python3.7 Действительно , словари до этой версии были неупорядоченным набором "ключ-значение", но начиная с этой версии словари являются упорядоченными и они будут выводиться в том же порядке, как мы до этого довавляли.

Схематически словарь можно рассмотреть так:

Ключом в словаре может быть любой неизменяемый тип. В python неизменяемыми типами являются числа и строки. Кортежи тоже можно использовать в качестве ключей , если содержат только строки, числа или кортежи. В качестве ключа в словарях нельзы использовать списки(list), потому что это изменяемый тип данных в Python.

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

Значением же конкретного ключа может в Python является любой объект. Но как мы знаем , в Python все является объектом

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

Создать словарь можно с помощью скобок {} или с ключевого слова dict


# Создаем пустой словарь 
empty_dict = {} 

#Создадим словарь со значениеями 
color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}

another_dict = dict(100: 'hundred', 200: 'two hundred', 300: 'three hundred' )


Выше мы создали два словаря с помощью скобок и еще один словарь с помощью ключевого слова dict

При создании словарей при помощи ключевого слова dict , вы должны иметь в виду , что в качестве ключей нельзя указывать зарезервированные слова Python. Это вызовет исключение. Создадим словарь с помощью dict , где в качестве ключа укажем зарезервированное слово class Это вызовет исключение и словарь не создастся. Но если мы при создании словаря будем ипользовать скобки и укажем в качестве ключа зарезирванное слово class, то словарь будет создан и никаких исключений не возникнет.

Получение данных из словаря

Допустим у нас есть словарь color_codes, который мы создавали выше , где ключами являются названия цветов , а значениями их HEX коды

Чтобы получить какой цвет соответсвует красному(red), мы указываем в круглых скобках ключ и получаем значение


>>> color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}
>>> color_codes['red']
'#FF0000'
>>> #Давайте получим код для зеленого цвета(green)
>>> color_codes['green']
'#008000'

Все легко и просто , а что будет если мы хотим получить код для черного цвета(black)


>>> color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}
>>> #Давайте получим код для черного цвета(black)
>>> color_codes['black']
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'black'
>>> 

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


>>> if 'black' in color_codes:
...     color_codes['black']
... else:
...     print("Not found key in dictonary")
... 
Not found key in dictonary
>>> 


Вышеуказанный код не следует рекомендациям EAFP(Ask forgiveness not permission), который переводится на русский как "легче попросить прощения, чем разрешения"

Чтобы следовать этим рекомендациям мы должны ловить исключения и обрабатывать , поэтому мы перепишем вышеуказанный код следуя этим рекомендациям


>>> color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}
>>> try:
...     color_codes['black']
... except KeyError:
...     print("Not found key in dictonary")
... 
Not found key in dictonary

Метод Get

Но у словарей в Python есть метод get() , который возвращает значения ключа , если ключ имеется в словаре , а если нет ключа в словаре , то возвращается None или другое значение которое мы укажем. Исключение не вызывается и это удобно


>>> color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}
>>> color_codes.get('black', 'Not found key in dictonary')
'Not found key in dictonary'

Метод Pop

Этот метод удаляет ключ из словаря и возвращает соотвествующее значение


>>> color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}
>>> color_codes.pop('red')
'#FF0000'
>>> color_codes
{'green': '#008000', 'yellow': '#FFFF00'}

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


>>> color_codes = {'red': '#FF0000', 'green':'#008000', 'yellow': '#FFFF00'}
>>> del color_codes['red']
>>> color_codes
{'green': '#008000', 'yellow': '#FFFF00'}

Объединение словарей

Начиная с Python 3.5 мы можем объединить словари следующим образом


>>> dictonary_1 = {"one": 1, "two": 2, "three": 3}
>>> dictonary_2 = {"four": 4, "five": 5}
>>> merged_dictonary = {**dictonary_1, **dictonary_2}
>>> merged_dictonary
{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}

А начиная с версии Python 3.9 объединение словарей стало еще проще и элегантнее


>>> dictonary_1 = {"one": 1, "two": 2, "three": 3}
>>> dictonary_2 = {"four": 4, "five": 5}
>>> merged_dictonary = dictonary_1 | dictonary_2
>>> merged_dictonary
{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}

Так что следите за новыми возможностями языка и используйте в своих проектах

comments powered by Disqus

Подписка

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

Рубрики

Теги