Python словари. Введение и основные методы работы с ними
Cловари в 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'}
Перебор(итерация) словаря
Прямая итерация по ключам
>>> 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 , как получать значения по ключам , как можно перебирать словари и как их объединять. Надеюсь, статья была полезной.
Буду рад ответить на вопросы в комментариях