Словари в Python

Установка Python 

Выбор текстового редактора 

Запуск программ Python в командной строке 

Числа и арифметические операторы Python 

Строки и функция print в Python 

Списки и кортежи в Python 

Сегментация последовательностей в Python 

Цикл for и функция range в Python 

Команда if и функция input в Python 

Словари в Python 

Множества в Python 

Цикл while в Python 

Функции в Python 

Классы в Python 

Файлы и исключения в Python 

Функции json. Сохранение данных Python 

Тестирование функций и классов на Python

Python массивы. Библиотека NumPy

Раннее были рассмотрены три встроенные коллекции, относящиеся к категории последовательностей - это строки, списки и кортежи. Теперь рассмотрим коллекции, не являющиеся последовательностью. Словарь (dictionary) представляет собой неупорядоченную коллекцию для хранения пар "ключ - значение". Каждому ключу соответствует конкретное значение. Ключи словаря должны быть неизменяемыми, например строки, числа, кортежи, и уникальными, то есть дубликаты невозможны. Разным ключам могут соответствовать одинаковые значения.

Содержание страницы:
1.1. Создание словаря на Python
1.2. Обращение к значению, связанному с ключом в словаре
1.3. Добавление новых пар "ключ-значение"
1.4. Удаление пар "ключ-значение"
1.5. Обращение к значениям методом get()
1.6. Проверка наличия заданного ключа в словаре
2.1. Перебор пар "ключ-значение" методом items()
2.2. Перебор всех ключей в словаре методом keys()
2.3. Перебор всех значений в словаре метод values()
3. Список словарей в Python
4. Список в словаре Python
5. Словарь в словаре Python

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Для создания словаря заключите в фигурные скобки {} список пар "ключ-значение", разделенных запятыми, в форме ключ: значение. Значением может быть число, список, строка и даже другой словарь. В примере ниже хранится информация об одном автомобиле. 

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135}
>>> print(car_1)
{'brand': 'bmw', 'type': 'седан', 'mileage': 58135}

В данном примере ключом является 'марка', а значение 'bmw'. Затем через запятую идет следующая пара ключ-значение и так далее. Если вы укажете ключ, то Python вернет значение, связанное с этим ключом. Ключ от значения всегда отделяется двоеточием. 

 

 

1.2. Обращение к значению, связанному с ключом в словаре Python. 

Для получения значения, связанного с ключом в словаре, укажите имя словаря, а затем ключ в квадратных скобках [ ].

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135}
>>> print(f"Пробег автомобиля {car_1['brand'].title()} равен - {car_1['mileage']} километров")
Пробег автомобиля Bmw равен - 58135 километров

В данном примере возвращается значения связанных с ключом в словаре с помощью f-строк строится сообщение. 

 

1.3. Добавление новых пар "ключ-значение"

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

>>> car_1['color'] = 'белый'
>>> print(car_1)
{'brand': 'bmw', 'type': 'седан', 'mileage': 58135, 'color': 'белый'}

В итоге мы получили в словаре новую пару "ключ-значение"  'цвет': 'белый'. Таким образом можно добавлять неограниченное количество пар. 

 

 

1.4. Удаление пар "ключ-значение"

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135}
>>> del car_1['type']
>>> print(car_1)
{'brand': 'bmw', 'mileage': 58135}

>>> car_1.pop('mileage')
58135
>>> print(car_1)
{'brand': 'bmw'}

 

 

1.5. Обращение к значениям методом get(). 

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

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135}
>>> color = car_1.get('color', 'Такого ключа не существует')
>>> print(color)
Такого ключа не существует

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

 

 

1.6. Проверка наличия заданного ключа в словаре Python. 

Чтобы проверить содержит ли словарь заданный ключ, можно воспользоваться оператором in или not in:

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135}
>>> 'type' in car_1
True
>>> 'color' in car_1
False
>>> 'color' not in car_1
True

 

2.1. Перебор пар "ключ-значение" методом items().

Для перебора словаря можно воспользоваться циклом for за которым следует вызов метода items(), возвращающий список пар "ключ-значение". Такой вид перебора хорошо работает для словарей, хранящих один вид информации с разными ключами. В примере ниже создадим словарь связывающий месяц с количеством дней в нем. Воспользуемся f-строками и создадим условия if-else для удобного чтения окончания. 

>>> year = {'январь': 31, 'февраль': 28, 'март': 31, 'апрель': 30}
>>> for month, days in year.items():
...     if days % 2 == 0:
...             print(f"{month} {days} дней.")
...     else:
...             print(f"{month} {days} день.")
...
январь 31 день.
февраль 28 дней.
март 31 день.
апрель 30 дней.

 

 

В начале в цикле for Python перебирает все пары "ключ-значение" в словаре. В процессе перебора ключ сохраняется в переменной month, а значение в переменной days. Затем создается условие, если количество дней четное, то выводится команда print с названием месяца и количества дней с окончанием "дней". Если количество не чётное, то пишется "день". 

 

 

 

2.2. Перебор всех ключей в словаре методом keys().

Метод keys() удобен если вы собираетесь работать с ключами в словаре. Переберем словарь и выведем все ключи в нем:

>>> year = {'январь': 31, 'февраль': 28, 'март': 31, 'апрель': 30}
>>> for key in year.keys():
...     print(key)
...
январь
февраль
март
апрель

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

>>> for key in year.keys():

>>> for key in year:

Явный вызов метода keys() может упростить чтение вашего кода. 

 

 

Начиная с Python 3.7 перебор содержимого словаря возвращает элементы в том порядке, в каком они вставлялись. Один из способов перебрать элементы в определенном порядке, вызвать функцию sorted()

>>> for key in sorted(year.keys()):
...     print(key)
...
апрель
март
февраль
январь

В результате ключи сортируются по алфавиту.

 

2.3. Перебор всех значений в словаре Python метод values().

Для получения всех значений в словаре Python без ключей, используют метод values()

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135, 'color': 'белый'}
>>> for v in car_1.values():
...     print(v)
...
bmw
седан
58135
белый

В процессе перебора цикла for значения сохраняются в переменную v и затем выводятся. Значения извлекаются из словаря без проверки на повторения. Чтобы получить значения без повторений можно воспользоваться множеством set()

 

 

3. Список словарей в Python.

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

>>> car_1 = {'brand': 'bmw', 'type': 'седан', 'mileage': 58135, 'color': 'белый'}
>>> car_2 = {'brand': 'ford', 'type': 'седан', 'mileage': 1205, 'color': 'черный'}
>>> car_3 = {'brand': 'audi', 'type': 'седан', 'mileage': 65489, 'color': 'белый'}

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

>>> cars = []
>>> cars.append(car_1)
>>> cars.append(car_2)
>>> cars.append(car_3)
>>> print(cars)
[{'brand': 'bmw', 'type': 'седан', 'mileage': 58135, 'color': 'белый'}, {'brand': 'ford', 'type': 'седан', 'mileage': 1205, 'color': 'черный'}, {'brand': 'audi', 'type': 'седан', 'mileage': 65489, 'color': 'белый'}]

 

 

Для удобства чтения кода можно вывести элементы списка с помощью цикла for

>>> for car in cars:
...     print(car)
...
{'brand': 'bmw', 'type': 'седан', 'mileage': 58135, 'color': 'белый'}
{'brand': 'ford', 'type': 'седан', 'mileage': 1205, 'color': 'черный'}
{'brand': 'audi', 'type': 'седан', 'mileage': 65489, 'color': 'белый'}

В процессе работы может понадобиться изменить какой-либо элемент. Для этого также можно воспользоваться циклом for и командой if-else. К примеру, нам нужно изменить пробег и цвет автомобиля Bmw.

>>> for car in cars:
...     if car['brand'] == 'bmw':
...             car['mileage'] = 100000
...             car['color'] = 'зеленый'
...             print(car)
...     else:
...             print(car)
...
{'brand': 'bmw', 'type': 'седан', 'mileage': 100000, 'color': 'зеленый'}
{'brand': 'ford', 'type': 'седан', 'mileage': 1205, 'color': 'черный'}
{'brand': 'audi', 'type': 'седан', 'mileage': 65489, 'color': 'белый'}

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

 

4. Список в словаре Python. 

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

>>> favorite_cars = {
...     'alex': ['bmw', 'audi', 'mersedes'],
...     'artem': ['audi'],
...     'phil': ['ford', 'porshe'],
...     'jon': ['lada']
...     }
>>> for name, cars in favorite_cars.items():  
...     print(f"\n{name.title()} любит автомобили марки:")
...     for car in cars:
...             print(f"\t{car.title()}")
...

Alex любит автомобили марки:
        Bmw
        Audi
        Mersedes

Artem любит автомобили марки:
        Audi

Phil любит автомобили марки:
        Ford
        Porshe

Jon любит автомобили марки:
        Lada

В процессе перебора словаря имя сохраняется в переменной name, а список в переменную cars. Выводим сообщение с помощью f-строки с именем опрашиваемого, затем с помощью цикла for перебираем элементы списка и выводим названия брендов с новой строки. 

 

5. Словарь в словаре Python 

Словарь тоже можно вложить в словарь. Например, словарь с пользователями на сайте.  У каждого пользователя хранится информация о нем имя и фамилия.

>>> users = {
...     'qwerty': {
...     'name': 'john',
...     'surname': 'brut'
...     },
...     'fill': {
...     'name': 'philip',
...     'surname': 'ivanov'
...     }
...     }
>>> for login, user in users.items():
...     print(f"\nВаш логин: {login}")
...     fullname = f"{user['name']} {user['surname']}"
...     print(f"\tДобро пожаловать на сайт {fullname.title()}!")
...

Ваш логин: qwerty
        Добро пожаловать на сайт John Brut!

Ваш логин: fill
        Добро пожаловать на сайт Philip Ivanov!

У нас определяется словарь users содержащий ключ- логин пользователя и значение - словарь с именем и фамилией. В процессе перебора словаря Python сохраняет ключ в переменной login, а словарь, связанный с ключом в переменной user. Выводим сообщение о логине пользователя на экран. Затем создаем переменную fullname с именем и фамилией извлеченную из словаря и выводим на экран. 

 

Далее: Множества в Python

Назад: Команда if и функция input в Python