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

10 Июл 2022 , 3937

Cловари в Python - это неупорядоченный набор пар "ключ-значение".

Но начиная с версии Python3.7 словари являются упорядоченными и они будут выводиться в том же порядке в каком добавляли.

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

Python словари

Ключом в словаре может быть любой неизменяемый тип. В 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'}

Перебор(итерация) словаря

Прямая итерация по ключам


>>> for key in color_codes:
...     print(key, '=>', color_codes[key])
... 
red => #FF0000
green => #008000
yellow => #FFFF00

Итерация с использованием .items()

У словарей есть метод items() , который возвращает новый вид словаря , который можно перебирать в цикле.Посмотрим , что возвращает метод items().


>>> color_codes.items()
dict_items([('red', '#FF0000'), ('green', '#008000'), ('yellow', '#FFFF00')])

А теперь перерем словарь с помощью items()


>>> for key, value in color_codes.items():
...     print('key =>', key)
...     print('value =>', value)
... 
key => red
value => #FF0000
key => green
value => #008000
key => yellow
value => #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}

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

Заключение

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

Буду рад ответить на вопросы в комментариях

comments powered by Disqus

Подписка

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

Рубрики

Теги