Наталья Кайда 29 ноября 2022

🐍 Самоучитель по Python для начинающих. Часть 6: Методы работы со словарями и генераторами словарей

Расскажем об особенностях словарей и генераторов словарей – минимум теории, максимум примеров плюс 10 задач для тренировки в конце статьи.
🐍 Самоучитель по Python для начинающих. Часть 6: Методы работы со словарями и генераторами словарей

Словарь dict – структура данных, в которой информация хранится в виде хеш-таблицы (ассоциативного массива). В таком массиве каждый ключ сопоставлен с определенным значением:

        my_dict = {'цвет': 'красный', 'размер': 'XS', 'цена': 650}
    

Питоновский словарь аналогичен HashMap в Java и Object в JavaScript.

Как создать словарь в Python: 6 способов

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

        info_dict = {}
my_dict = dict()
    

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

Способ 1: Перечисление ключей и значений

Данные словаря перечисляются в виде пар ключ: значение через запятую и заключаются в фигурные скобки:

        car = {'модель': 'Audi A5 Sportback', 'цвет': 'красный', 'пробег': '100500 км'}
    

Способ 2: Создание словаря с помощью dict()

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

        >>> my_dict = dict(name = 'Евгений', age = 28, position = 'Java-разработчик')
>>> print(my_dict)
{'name': 'Евгений', 'age': 28, 'position': 'Java-разработчик'}

    

Способ 3: Создание словаря с помощью zip() и dict()

Если есть два списка, в одном из которых хранятся ключи, а в другом – значения, словарь можно создать при помощи zip() и dict():

        >>> keys = ['цвет', 'размер', 'количество', 'цена']
>>> values = ['синий', '35х45х60', 5, 2500]
>>> info = dict(zip(keys, values))
>>> print(info)
{'цвет': 'синий', 'размер': '35х45х60', 'количество': 5, 'цена': 2500}

    

Способ 4: Создание словаря из списка кортежей и кортежа списков

Если имеется список кортежей, в которых первый элемент служит ключом, а второй – значением, словарь можно сформировать с помощью dict():

        >>> item = [('модель', 'Aura'), ('цвет', 'пурпурный'), ('наличие', 'на складе')]
>>> item_dict = dict(item)
>>> print(item_dict)
{'модель': 'Aura', 'цвет': 'пурпурный', 'наличие': 'на складе'}

    

Точно так же этот подход работает с кортежeм списков:

        >>> employee= (['имя', 'Никита'], ['отчество', 'Сергеевич'], ['фамилия', 'Колобков'], ['возраст', 32])
>>> empl_dict = dict(employee)
>>> print(empl_dict)
{'имя': 'Никита', 'отчество': 'Сергеевич', 'фамилия': 'Колобков', 'возраст': 32}

    

Способ 5: Метод fromkeys()

Если нужно создать словарь, у всех ключей которого – одинаковые значения, можно воспользоваться методом fromkeys():

        >>> new_dict = dict.fromkeys(['север', 'юг', 'восток', 'запад'], 0)
>>> print(new_dict)
{'север': 0, 'юг': 0, 'восток': 0, 'запад': 0}

    

Способ 6: Использование генератора словарей

Словари можно создавать на основе списков и строк. При этом одновременно можно проводить различные действия с числами и символами – математические операции, подсчет, сравнение и так далее:

        >>> numbers = [2, 18, 5, 7, 2, 32, 6, 9, 4, 8, 9, 12, 14, 14]
>>> my_dict = {n: numbers.count(n) for n in numbers}
>>> print(my_dict)
{2: 2, 18: 1, 5: 1, 7: 1, 32: 1, 6: 1, 9: 2, 4: 1, 8: 1, 12: 1, 14: 2}

    

В генераторах можно использовать преобразование типов данных и условия:

        >>> st = '12 31 4 53 6 7 4 90 8 7 56 3 42'
>>> my_dict = {n: int(n) * 2 for n in st.split() if int(n) % 2 == 0}
>>> print(my_dict)
{'12': 24, '4': 8, '6': 12, '90': 180, '8': 16, '56': 112, '42': 84}

    
🐍 Библиотека питониста
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»
🐍🎓 Библиотека собеса по Python
Подтянуть свои знания по Python вы можете на нашем телеграм-канале «Библиотека собеса по Python»
🐍🧩 Библиотека задач по Python
Интересные задачи по Python для практики можно найти на нашем телеграм-канале «Библиотека задач по Python»

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

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

        >>> my_dict = {'фрукт': 'яблоко', 'цвет': 'красный', 'количество': '53 кг'}
>>> print(my_dict['цвет'], my_dict[' количество '])
красный 53 кг

    

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

        >>> my_dict = {'цвет': 'красный', 'цвет': 'синий'}
>>> print(my_dict)
{'цвет': 'синий'}

    

В качестве ключей можно использовать все типы данных, которые относятся к неизменяемым: int, float, Boolean (True/False), frozenset, строки, кортежи. Нельзя использовать списки, обычные множества set и словари, поскольку они являются изменяемыми. При этом в качестве значения в словарях можно использовать данные любого типа, включая словари – такие словари называются вложенными:

        >>> hr_info = {'сотрудник1': {'имя': 'Егор', 'должность': 'пентестер'},
    	'сотрудник2': {'имя': 'Михаил', 'должность': 'DevOps'},
	    'сотрудник3': {'имя': 'Татьяна', 'должность': 'фронтендер'}}
>>> print(hr_info['сотрудник2']['должность'])
DevOps

    
***

Отлично! Вы освоили все способы создания словарей и их ключевые особенности.

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

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

  1. Полный арсенал методов для работы со словарями: от безопасного получения данных с помощью .get() до перебора всех ключей, значений и пар с .keys(), .values() и .items().
  2. 10 практических задач для закрепления навыков, от создания телефонного справочника до подсчета символов и анализа данных.

Комментарии

ВАКАНСИИ

Добавить вакансию

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ