Словари в Python
Словарь 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 3. 6, словари являются упорядоченными коллекциями – пары ключ: значение
хранятся в словаре в порядке добавления. В отличие от строк и списков, словари не поддерживают срезы и конкатенацию, а к элементу словаря нельзя обратиться по индексу – в качестве индексов в словарях выступают ключи:
>>> my_dict = {'фрукт': 'яблоко', 'цвет': 'красный', 'количество': '53 кг'} >>> print(my_dict['цвет'], my_dict[' количество ']) красный 53 кг
Ключи в словаре не должны повторяться – если добавить в словарь ключ, идентичный существующему, Python сохранит только один ключ с последним значением:
>>> my_dict = {'цвет': 'красный', 'цвет': 'синий'} >>> print(my_dict) {'цвет': 'синий'}
В качестве ключей можно использовать все типы данных, которые относятся к неизменяемым: int, float, Boolean (True/False), frozenset, строки, кортежи.
>>> hr_info = {'сотрудник1': {'имя': 'Егор', 'должность': 'пентестер'}, 'сотрудник2': {'имя': 'Михаил', 'должность': 'DevOps'}, 'сотрудник3': {'имя': 'Татьяна', 'должность': 'фронтендер'}} >>> print(hr_info['сотрудник2']['должность']) DevOps
Методы словарей в Python 3
Словари поддерживают некоторые методы, общие с другими типами данных, и имеют несколько своих собственных. Рассмотрим общие и уникальные методы на примерах.
Длина словаря и принадлежность элемента:
>>> my_dict = {'товар': 'футболка', 'размер': 'XL', 'цвет': 'белый', 'количество': '560'} >>> print(len(my_dict)) 4 >>> print('есть на складе' if 'футболка' in my_dict else 'нет в наличии') нет в наличии
Сумма ключей, максимальный и минимальный элементы
Функция sum() подсчитывает сумму ключей словаря и работает только в том случае, когда ключи являются числами:
>>> my_dict = {5: '50', 8: '90'} >>> print(sum(my_dict)) 13
Функции min() и max() работают для большинства типов данных:
>>> my_dict = {'напиток': 'яблочный сок', 'объем': '2 л', 'цена': 250, 'количество': '156'} >>> print(min(my_dict), max(my_dict)) количество цена >>> print(min(my_dict, key=len)) цена
Объединение словарей
Словари можно объединять – если в них есть одинаковые ключи, в полученном словаре значение будет взято из последнего словаря:
>>> my_dict1 = {'товар': 'куртка', 'размер': 'XL', 'цвет': 'черный'} >>> my_dict2 = {'артикул': '35m', 'количество': 34, 'цвет': 'синий'} >>> print({**my_dict1, **my_dict2}) {'товар': 'куртка', 'размер': 'XL', 'цвет': 'синий', 'артикул': '35m', 'количество': 34}
Сравнение словарей
>>> my_dict = {'марка': 'BMW', 'цвет': 'черный', 'автопилот': 'нет'} >>> my_dict2 = {'марка': 'Audi', 'цвет': 'черный', 'автопилот': 'нет'} >>> print(my_dict == my_dict2) False
Получение ключей, значений и элементов
Для работы с ключами используется метод keys(), со значениями – values(), с парами – items():
>>> my_dict = {'напиток': 'чай', 'вес': 100, 'цена': 550, 'количество': 256} >>> print(my_dict.values()) dict_values(['чай', 100, 550, 256]) >>> print(my_dict.keys()) dict_keys(['напиток', 'вес', 'цена', 'количество']) >>> print(my_dict.items()) dict_items([('напиток', 'чай'), ('вес', 100), ('цена', 550), ('количество', 256)])
Добавление и изменение элементов
Для изменения значения какого-либо ключа используют оператор присваивания =
:
>>> my_dict = {'должность': 'разработчик', 'имя': 'Антон'} >>> my_dict['имя'] = 'Евгений' >>> print(my_dict) {'должность': 'разработчик', 'имя': 'Евгений'}
Если же такого ключа в словаре еще нет, новый элемент будет добавлен автоматически:
>>> my_dict = {'должность': 'разработчик', 'имя': 'Евгений'} >>> my_dict['фамилия'] = 'Егоров' >>> print(my_dict) {'должность': 'разработчик', 'имя': 'Евгений', 'фамилия': 'Егоров'}
Однако если обратиться к несуществующему элементу без присвоения ему значения, произойдет ошибка:
>>> my_dict = {'должность': 'разработчик', 'имя': 'Евгений', 'фамилия': 'Егоров'} >>> print(my_dict['город']) Traceback (most recent call last): File "<pyshell>", line 1, in <module> KeyError: 'город'
Получение значения по ключу – get()
>>> my_dict = {'должность': 'инженер', 'имя': 'Кирилл'} >>> print(my_dict. get('зарплата', 'не указана')) не указана
Получение значения и/или добавление элемента с setdefault()
Другой метод для получения значения – setdefault(). Он действует двумя разными способами:
1) Если указанный ключ уже есть в словаре – возвращает его значение (даже при наличии значения по умолчанию):
>>> my_dict = {'возраст': 25, 'имя': 'Роман'} >>> print(my_dict.setdefault('возраст', 'не указан')) 25
2) Если ключа нет – вставляет элемент в словарь, возвращает значение:
>>> my_dict = {'возраст': 35, 'имя': 'Егор'} >>> print(my_dict.setdefault('зарплата', 150000)) 150000 >>> print(my_dict) {'возраст': 35, 'имя': 'Егор', 'зарплата': 150000}
Дополнение словаря
Элементы одного словаря можно «обновить», дополнить элементами другого. В случае совпадения ключей, как и при показанном ранее объединении словарей, сохраняются значения второго словаря:
>>> my_dict1 = {'должность': 'инженер', 'имя': 'Роман'} >>> my_dict2 = {'должность': 'врач', 'имя': 'Роман'} >>> my_dict1.update(my_dict2) >>> print(my_dict1) {'должность': 'врач', 'имя': 'Роман'}
Удаление элементов словаря
Как и в случае со списками, удалять элементы из словарей можно несколькими способами:
del – удаляет элемент с заданным ключом:
>>> my_dict = {'жанр': 'триллер', 'рейтинг': 7.5, 'название': 'Опасные связи'} >>> del my_dict['название'] >>> print(my_dict) {'жанр': 'триллер', 'рейтинг': 7.5}
pop() – возвращает удаленное значение:
>>> my_dict = {'жанр': 'драма', 'рейтинг': 8.5, 'название': 'Зеленая миля'} >>> фильм = my_dict. pop('название') >>> print(фильм) Зеленая миля
popitem() – удаляет последний добавленный элемент и возвращает его ключ: значение в виде кортежа:
>>> my_dict = {'жанр': 'фэнтези', 'рейтинг': 7.7, 'название': 'Властелин колец'} >>> movie = my_dict.popitem() >>> print(movie) ('название', 'Властелин колец')
clear() – удаляет все элементы словаря:
>>> my_dict = {'жанр': 'драма', 'рейтинг': 6.1, 'название': 'В сердце моря'} >>> my_dict.clear() >>> print(my_dict) {}
Создание копии словаря
Копия словаря создается тем же методом, что и в случае со списками – с помощью copy():
>>> my_dict = {'жанр': 'фантастика', 'рейтинг': 8.8, 'название': 'Бегущий по лезвию бритвы'} >>> new_dict = my_dict. copy() >>> print(new_dict) {'жанр': 'фантастика', 'рейтинг': 8.8, 'название': 'Бегущий по лезвию бритвы'}
Практика
Задание 1
Напишите программу, которая получает на вход две строки, и формирует из них словарь. Ключами служат слова из первой строки, значениями – целые числа из второй.
Пример ввода:
яблоки сливы груши персики манго киви апельсины 34 56 23 89 55 32 11
Вывод:
{'яблоки': 34, 'сливы': 56, 'груши': 23, 'персики': 89, 'манго': 55, 'киви': 32, 'апельсины': 11}
Решение:
keys = input().split() values = map(int, input().split()) my_dict = dict(zip(keys, values)) print(my_dict)
Задание 2
Напишите программу, которая получает на вход строку чисел, разделенных пробелами, и формирует словарь, в котором ключами служат четные числа, а значениями – слово четное
.
Пример ввода:
45 6 8 23 21 87 65 45 38
Вывод:
{6: 'четное', 8: 'четное', 38: 'четное'}
Решение:
nums = map(int, input().split()) my_dict = {n: 'четное' for n in nums if n % 2 == 0} print(my_dict)
Задание 3
Напишите программу, которая получает на вход строку и подсчитывает, сколько раз в ней встречается каждый символ (независимо от регистра). Результат нужно вывести без фигурных скобок.
Пример ввода:
Есть только один способ избежать критики: ничего не делайте, ничего не говорите и будьте никем.
Вывод:
е-11 с-3 т-7 ь-4 -14 о-9 л-2 к-4 д-3 и-10 н-6 п-1 б-3 з-1 ж-1 а-2 р-2 :-1 ч-2 г-3 й-1 ,-1 в-1 у-1 м-1 . -1
Решение:
st = input().lower() my_dict = {i: st.count(i) for i in st} print(*[str(k) + '-' + str(v) for k, v in my_dict.items()])
Задание 4
Напишите программу, которая получает 2 слова на разных строках и определяет, являются ли эти слова анаграммами.
Пример ввода 1:
меч мяч
Вывод:
Нет
Пример ввода 2:
Минотавр Норматив
Вывод:
Да
Решение:
word1, word2 = input().lower(), input().lower() c = {k: word1.count(k) for k in word1} d = {k: word2.count(k) for k in word2} print ('Да' if c == d else 'Нет')
Задание 5
Напишите программу, которая получает строку текста и формирует из нее сначала список списков, а затем словарь, в котором первый элемент подсписка служит значением, а второй – ключом. Результат нужно вывести в столбик, без фигурных скобок.
Пример ввода:
красный, цвет; Gucci, бренд; 145000, цена; 3, количество
Вывод:
цвет: красный бренд: Gucci цена: 145000 количество: 3
Решение:
sp = [[i.split(', ')[0], i.split(',')[1]] for i in input().split('; ')] my_dict = {k: v for v, k in sp} result = '\n'.join(f'{k}: {v}' for k, v in my_dict.items()) print(result)
Задание 6
Напишите программу, которая формирует телефонный справочник из введенной пользователем строки, а затем выдает нужный номер по имени абонента. Если абонента с таким именем нет, нужно вывести Нет такого абонента
.
Пример ввода:
Маша (923)567-78-90; Саша (912)345-23-21; Егор (812)456-64-23 Маша
Вывод:
(923)567-78-90
Решение:
st = input(). split('; ') phones = {i.split()[0]:i.split()[1] for i in st} name = input() print(phones.get(name, 'Нет такого абонента'))
Задание 7
Напишите программу, которая:
- получает на вход две строки;
- формирует словарь, в котором ключи взяты из первой строки, а значения (целые числа) – из второй;
- выводит
Есть
, есть ли в словаре значения, равные 5, иНет
в противном случае.
Пример ввода:
яблоки груши апельсины лимоны киви 2 7 9 5 1
Вывод:
Есть
Решение:
sp1 = input().split() sp2 = map(int, input().split()) my_dict = dict(zip(sp1, sp2)) print('Есть' if 5 in my_dict.values() else 'Нет')
Задание 8
Напишите программу, которая получает на вход целое число от 1 до 12, и выводит название месяца, порядковому номеру которого соответствует введенное число. Если пользователь ввел число, которое меньше или больше допустимого – вывести подсказку Введите число от 1 до 12
.
Пример ввода:
10
Вывод:
Октябрь
Решение:
months = {1: 'Январь', 2: 'Февраль', 3: 'Март', 4: 'Апрель', 5: 'Май', 6: 'Июнь', 7: 'Июль', 8: 'Август', 9: 'Сентябрь', 10: 'Октябрь', 11: 'Ноябрь', 12: 'Декабрь'} num = int(input()) print(months.get(num, 'Введите число от 1 до 12'))
Задание 9
Напишите программу, которая:
- Принимает на вход 3 строки с названиями стран и расположенными в них городами.
- Получает от пользователя название города и выводит страну, в которой он находится.
Пример ввода:
Австрия Вена Инсбрук Линц Грац Испания Барселона Мадрид Малага Севилья Франция Париж Марсель Лион Ницца Грац
Вывод:
Австрия
Решение:
my_dict = {k:v for _ in range(3) for k, *v in [input(). split()]} city = input() [print(k) for k, v in my_dict.items() if city in v]
Задание 10
Имеется следующий словарь:
numbers = {'dict1': [11, 20, 30, 17, 6, 24, 90, 15, 17], 'dict2': [21, 33, 40, 10, 29, 31, 90, 12], 'dict3': [52, 34, 20, 21, 44, 22, 10, 87], 'dict4': [22, 54, 29, 21, 70, 88, 99, 34], 'dict5': [21, 40, 29, 21, 19, 32, 68, 77], 'dict6': [14, 60, 70, 10, 55, 61, 84, 99], 'dict7': [45, 80, 12, 23, 42, 22, 37, 90], 'dict8': [13, 14, 15, 26, 48, 92, 36, 11], 'dict9': [12, 70, 18, 28, 18, 28, 53, 91], 'dict10': [29, 79, 18, 28, 18, 28, 32, 55]}
Напишите программу, которая удалит из значений словаря все четные числа.
Решение:
numbers = {key: [i for i in value if i % 2 != 0] for key, value in numbers. items()} print(numbers)
Подведем итоги
Словари и генераторы словарей помогают в решении задач, связанных с подсчетом, множественным выбором, хранением и обработкой значений, описывающих свойства объектов. Во многих случаях словари позволяют избежать использования многоуровневых условий if… elif… else
. В следующей статье будем изучать методы кортежей.
***
Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
- Основы разработки игр на Pygame
- Основы работы с SQLite
***
Материалы по теме
- 🐍 Словари в Python: 5 задач с решениями для изучения генераторов и методов словарей
- 🐍🧩 Словари в Python: 12 задач для начинающих с решениями
Словари в Python 3 | 8HOST.
COM 2 марта, 2017 12:27 пп 7 743 views | 2 комментарияPython | Amber | 2 комментария
Словари – это изменяемый неупорядоченный тип данных, состоящий из коллекций произвольных объектов в формате «ключ: значение». Также словари называются хэш-таблицами или ассоциативными массивами.
Обычно словари используются для хранения связанных между собой данных; например, пара может состоять из имени пользователя и его ID. Элементы словарей берутся в фигурные скобки { }.
Словарь выглядит так:
8host = {'username': '8host-blog', 'online': True, 'followers': 987}
Чтобы отделить ключ от значения, в словарях используются символы двоеточия. Пары «ключ: значение» отделяются друг от друга запятыми.
Ключи всегда находятся слева от двоеточия. Ключ может быть представлен любым неизменяемым типом данных. В приведённом выше примере содержатся такие ключи:
- ‘username’
- ‘online’
- ‘followers’
В данном случае ключи выражены строками.
Читайте также: Основы работы со строками в Python 3
Слева от двоеточия находятся значения. Значение может выражаться любым типом данных. В словаре выше мы видим такие значения:
- ‘8host-blog’
- True
- 987
Первый ключ представлен строкой, второй – логическим значением, а третий – целым числом.
Читайте также:
- Логические выражения в Python 3
- Типы данных в Python 3
Попробуйте отобразить словарь 8host:
print(8host)
{'username': '8host-blog', 'followers': 987, 'online': True}
Обратите внимание: порядок пар «ключ: значение» изменился. Это произошло потому, что словари являются неупорядоченным типом данных. В отличие от списков и кортежей, словари не сохраняют порядок своих элементов и, соответственно, не индексируются.
Читайте также:
- Работа со списками в Python 3
- Кортежи в Python 3
В словарях пары всегда расположены в случайном порядке. Однако сами пары «ключ: значение» всегда остаются неизменными, благодаря чему и осуществляется доступ к данным.
Доступ к элементам словаря
Поскольку элементы словаря не упорядочены, к ним невозможно получить доступ по индексу. Чтобы получить доступ к значению, нужно вызвать соответствующий ключ.
Доступ к данным по ключу
Словари могут стать важной частью разработанной в Python программы.
К примеру, чтобы вывести только имя пользователя в приведённом выше словаре, нужно ввести:
print(8host['username'])
8host-blog
Словари ведут себя как базы данных, потому что для доступа к значению используется ключ, а не индекс.
Таким же образом можно вызвать и остальные значения этого словаря:
print(8host['followers'])
987
print(8host['online'])
True
Доступ к данным с помощью функций
Доступ к значениям можно получить не только с помощью ключей, но и при помощи функций.
- dict. keys() – выводит ключи словаря.
- dict.values() – выводит значения словаря.
- dict.items() – выводит пары в виде кортежа (ключ, значение).
Попробуйте использовать функцию dict.keys(), чтобы получить ключи словаря. Передайте переменную 8host.keys() функции print().
print(8host.keys())
dict_keys(['followers', 'username', 'online'])
Ключи возвращаются в виде итерируемого объекта класса dict_keys и отображаются в формате списка.
С помощью этой функции можно создавать запросы. К примеру, так можно просмотреть одинаковые ключи в двух словарях:
8host = {'username': '8host-blog', 'online': True, 'followers': 987}
jesse = {'username': 'Jesse', 'online': False, 'points': 723}
for common_key in 8host.keys() & jesse.keys():
print(8host[common_key], jesse[common_key])
Словари 8host и jesse содержат данные о профилях пользователей.
Эти профили отличаются: первый – профиль для социальных сетей, второй – профиль для игр. Однако у них совпадают два ключа: username и online. Чтобы убедиться в этом, запустите программу, и она выдаст:
8host-blog Jesse
True False
Но этот пример продемонстрировал, что dict.keys () можно использовать для поиска общих ключей в разных словарях (особенно в больших словарях). Конечно, можно улучшить программу и сделать вывод более удобным для чтения.
Функция dict.values() используется аналогичным образом и возвращает значения заданного словаря. Например:
8host = {'username': '8host-blog', 'online': True, 'followers': 987}
print(8host.values())
dict_values([True, '8host-blog', 987])
Методы keys() и values() возвращают неотсортированные ключи или значения словаря 8host в виде объектов dict_keys и dict_values соответственно.
Чтобы запросить все элементы словаря, используйте функцию items():
print(8host.items())
dict_items([('online', True), ('username', '8host-blog'), ('followers', 987)])
Эта функция возвращает объект dict_items, который состоит из пар (ключ, значение), представленных в виде кортежей.
Возвращенные списки можно итерировать с помощью цикла for. К примеру, так можно вывести каждый ключ и значение заданного словаря в более удобном для чтения формате:
for key, value in 8host.items():
print(key, 'is the key for the value', value)
online is the key for the value True
followers is the key for the value 987
username is the key for the value 8host-blog
Цикл for выполнил итерацию списков ключей и значений и вывел результат построчно.
Редактирование словарей
Словари являются изменяемым типом данных, потому их можно редактировать. В данном разделе вы узнаете, как добавлять и удалять элементы словарей.
Добавление и изменение элементов словарей
Для добавления элементов используется такой синтаксис:
dict[key] = value
Попробуйте добавить в словарь новую пару. Например:
usernames = {'8host': '8host-blog', 'Jamie': 'jamie54'}
usernames['Drew'] = 'iam-drew'
print(usernames)
{'Drew': 'iam-drew', '8host': '8host-blog', 'Jamie': 'jamie54'}
Как видите, в словаре появилась новая пара ‘Drew’: ‘iam-drew’.
Этот же синтаксис можно использовать для изменения значений, присвоенных ключам. Для этого нужно сослаться на требуемый ключ и передать ему новое значение.
Давайте рассмотрим словарь drew, который содержит данные об одном из пользователей этой сети. Предположим, сегодня количество его подписчиков заметно увеличилось, потому нужно обновить значение его ключа ‘followers’. Чтобы убедиться, что значение было изменено, используйте функцию print().
drew = {'username': 'iam-drew', 'online': True, 'followers': 305}
drew['followers'] = 342
print(drew)
{'username': 'iam-drew', 'followers': 342, 'online': True}
Как видите, значение ключа followers было изменено.
Этот метод позволяет добавлять данные в словарь путём пользовательского ввода. Создайте простую программу для командной строки, usernames.py, которая позволит пользователям добавлять данные в словарь.
# Определить исходный словарь
usernames = {'8host': '8host-blog', 'Jamie': 'jamie54'}
# Добавить цикл while
while True:
# Запросить имя
print('Enter a name:')
# Присвоить его переменной
name = input()
# Проверить, есть ли такое имя в словаре и вывести результат
if name in usernames:
print(usernames[name] + ' is the username of ' + name)
# Если имени нет…
else:
# Вывести на экран
print('I don\'t have ' + name + '\'s username, what is it?')
# Добавить имя пользователя для такого имени
username = input()
# Присвоить имя пользователя ключу
usernames[name] = username
# Сообщить об обновлении данных
print('Data updated. ')
Запустите программу с помощью командной строки:
python usernames.py
Она выведен на экран:
Enter a name:
8host
8host-blog is the username of 8hosts
Enter a name:
Jesse
I don't have Jesse's username, what is it?
Jesse
Data updated.
Enter a name:
Чтобы остановить программу, нажмите CTRL + C.
Читайте также: Условные операторы в Python 3
Как видите, словари можно редактировать в интерактивном режиме. Что касается только что рассмотренной программы, то после того, как вы нажмёте CTRL + C, все новые данные будут утрачены, поскольку в программе не настроены операции чтения и записи.
Читайте также: Работа с текстовыми файлами в Python 3
Также редактировать словари можно с помощью функции dict.update().
Попробуйте добавить в словарь jesse ключ ‘followers’ и присвоить ему целое число с помощью jesse.update(). Чтобы отобразить словарь, используйте print().
jesse = {'username': 'Jesse', 'online': False, 'points': 723}
jesse.update({'followers': 481})
print(jesse)
{'followers': 481, 'username': 'Jesse', 'points': 723, 'online': False}
Метод dict.update() позволяет также изменять значения ключей.
Попробуйте изменить значение ключа online в словаре 8host:
8host= {'username': '8host-blog', 'online': True, 'followers': 987}
8host.update({'online': False})
print(8host)
{'username': '8host- blog', 'followers': 987, 'online': False}
Строка 8host.update({‘online’: False}) ссылается на ключ ‘online’ и изменяет его значение True на False. Функция print() позволяет проверить результат.
Удаление элементов словарей
Чтобы удалить элемент из словаря, используйте синтаксис:
del dict[key]
Вернёмся к словарю jesse и попробуем удалить из него строку ‘points’.
jesse = {'username': 'Jesse', 'online': False, 'points': 723, 'followers': 481}
del jesse['points']
print(jesse)
{'online': False, 'username': 'Jesse', 'followers': 481}
Чтобы очистить словарь, используйте функцию dict. clear(). Она сохранит словарь на случай, если он пригодится в дальнейшей работе, но удалит все его элементы.
Попробуйте удалить все элементы jesse:
jesse = {'username': 'Jesse', 'online': False, 'points': 723, 'followers': 481}
jesse.clear()
print(jesse)
{}
Как видите, в словаре не осталось ни одной пары.
Чтобы удалить словарь, используйте:
del jesse
print(jesse)
Если вы попробуете отобразить несуществующий словарь, на экране появится ошибка:
NameError: name 'jesse' is not defined
Заключение
Теперь вы владеете основами работы со словарями. Словари состоят из пар «ключ: значение», которые расположены в случайном порядке и не индексируются.
Читайте также:
- Типы данных в Python 3
- Web scraping с помощью Scrapy и Python 3
Как использовать словари в Python 3 | Linode Docs
Словарь на Python очень похож на словарь, который вы найдете в Интернете, или на бумажную версию, которую вы найдете на полке. Он состоит из набора пар ключ-значение. Ключи словаря Python используются для извлечения словарной статьи вместе с ее значением. Действие по присвоению ключа значению называется сопоставлением , поэтому словарь Python представляет собой сопоставленный тип данных . Это руководство знакомит вас с типом данных словаря Python 3 и показывает, как использовать словари в коде Python.
Синтаксис словаря в Python 3
Когда вы создаете словарь в Python 3, его синтаксис состоит из пары ключ-значение в отображенном расположении. Вы можете создать словарь Python несколькими способами. В разделах ниже показаны различные способы создания словаря Python. У каждого метода есть вариант использования, в котором он работает лучше всего. Словарь Python поддерживает использование кортежей для ключей. Также можно определить словарь, используя понимание словаря , чтобы сделать код значительно короче.
Python 3: определение словаря
Словарь всегда имеет ключ, который зависит от неизменяемого типа, например: int
, float
, decimal
, string
, кортеж
и диапазон
. Как правило, вы используете один и тот же тип данных для всех ключей словаря. Однако один словарь может содержать ключи разных неизменяемых типов, а его значения могут быть любого типа. Например:
чисел = {'Один': 1, 'Два': 'Два', 'Три': 3.0}
Если вы напечатаете значение словаря чисел
, созданного выше, вы увидите следующий вывод:
{'Один': 1, 'Два': 'Два', 'Три': 3.0}
Как отмечено через запятую (,
)
}
) для завершения словаряПример словаря дополнительно делает следующее:
- Использует тип данных
string
для ключей, которые состоят из'One'
, 90 017 ‘ Два иТри
. - Использует различные типы данных для значений, которые состоят из
1
,'Two'
и3.0
.
Словарь может смешивать неизменяемые типы данных в ключах. Это означает, что следующий словарь также приемлем:
чисел = {1: «Один», «Два»: «Два», 3.0: «Три»}
Однако доступ к ключам словаря намного сложнее при использовании смешанных типов данных.
Альтернативный синтаксис словаря
Словарь Python можно создать с помощью конструктора dict()
и последовательности пар ключ-значение.
чисел = dict([('Один', 1), ('Два', 'Два'), ('Три', 3.0)])
Печать словаря чисел
приводит к следующему выводу:
{'Один': 1, 'Два': 'Два', 'Три': 3.0}
В приведенных ниже примерах используется конструктор dict()
для создания словарей с использованием различных типов данных в качестве ключей и значений. Пример демонстрирует, что во многих случаях нет необходимости преобразовывать формат ваших данных перед созданием словаря.
чисел = dict(zip(['Один', 'Два', 'Три'], [1, 'Два', 3.0]))
Печать словаря чисел
приводит к следующему выводу:
{'Один': 1, 'Два': 'Два', 'Три': 3. 0}
В приведенном ниже примере показано, что словарь можно смешивать и сопоставлять создание методов. Он использует dict()
метод для создания словаря чисел
. Первая запись словаря номеров
состоит из другого словаря, объявленного с использованием синтаксиса фигурных скобок. Комбинирование методов создания словарей особенно полезно, когда данные, с которыми вы работаете, представлены в нескольких формах.
чисел = dict({'Один': 1, 'Три': 3.0}, Два = 'Два')
Печать словаря чисел
приводит к следующему выводу:
{'Один': 1, 'Три': 3.0, 'Два': 'Два'}
Использование кортежей в качестве ключей словаря
Кортеж — это встроенная структура данных Python, в которой хранится несколько значений, разделенных запятыми. Кортежи в качестве ключей словаря часто используются для хранения координат точек, используемых на картах или в других приложениях, которым требуются координатные данные. Например, используйте кортеж для хранения имени и фамилии, которые сопоставляются с номером телефона. Пример словаря map_coordinates
использует кортеж в качестве ключей.
map_coordinates = {(0,1): 100, (2,1): 200}
Чтобы узнать больше о синтаксисе кортежей Python и других темах, таких как встроенные методы кортежей и распаковка кортежей, см. наше руководство Введение в кортежи Python.
Поглощение словаря
Поглощение словаря создает новый словарь и заполняет его ключи или значения на основе выражения. Типичный синтаксис для понимания словаря следующий:
имя_словаря = {ключ:значение для (ключ,значение) в словаре.элементы()}
Например, следующая обработка словаря использует числа от 0
до 9
в качестве ключей и квадраты значений этих ключей для значений:
squared_dict = {x: x ** 2 for x in range(10)}
Печать понимания словаря squared_dict
отображает словарь, созданный с помощью понимания словаря:
print(squared_dict)
Вывод:
{0:0, 1:1, 2:4, 3:9, 4:16, 5:25, 6:36, 7:49, 8: 64, 9: 81}
Помимо использования выражения для значений, вы также можете использовать выражения для создания ключей словаря. Например, следующая интерпретация словаря определяет словарь с символами от A
до J
в качестве ключей:
example_dict = {chr(x + 65): x ** 2 для x в диапазоне (10)}
Печать понимания словаря example_dict
отображает следующий словарь:
print(example_dict)
Вывод:
{'A': 0, 'B': 1, 'C': 4, 'D': 9, 'E': 16, 'F': 25, 'G': 36 , 'H': 49, 'I': 64, 'J': 81}
Хотя распознавание словаря генерирует ключи и значения, сам словарь действует как любой другой словарь Python.
Словарные включения требуют меньшего набора текста благодаря лаконичному синтаксису. Это также снижает вероятность ошибок и, если написано просто, делает ваш код более читабельным.
Как получить значение из словаря в Python?
После создания словаря вы можете получить доступ к его значениям несколькими способами. Два распространенных метода выполнения этой задачи — прямой доступ к значению или доступ к нему как часть цикла. Словарь часто содержит нежелательные значения, поэтому использование интерпретаций Python может сократить размер словаря до того, как вы получите доступ к его значениям. Эти методы представлены в следующих разделах.
Если вы не знакомы с циклами for и while в Python, вы можете просмотреть несколько примеров в нашем руководстве Циклы For и While в Python 3.
Доступ к значениям словаря
Чтобы обеспечить доступ к своим значениям, словарь использует ключи, а не числовые индексы. Когда в словаре используются четко определенные ключи, гораздо проще понять, какой тип данных хранится в словаре.
Синтаксис для доступа к значению словаря с использованием его ключа следующий:
example_var = example_dict['key']
Используя словарь чисел
из начала этого руководства, вы можете получить доступ к значению ключа Один
, как показано ниже:
чисел = {'Один': 1, 'Два': 'Два', 'Три': 3.0} example_var = числа['Один']
Когда вы печатаете example_var
, возвращается значение ключа 'One'
, т. е. 1
:
print(example_var)
Вывод:
1
Если вы попытаетесь получить доступ к несуществующему ключу из словаря, Python выдаст исключение KeyError
. Это исключение часто возникает, когда указанный ключ использует другое написание или другой регистр, чем исходный ключ. Например, если вы попытаетесь получить доступ к «один» ключ
, вместо «один» ключ
вы получаете исключение KeyError
:
печать (числа ['один'])
Трассировка (последний последний вызов): Файл "", строка 1, в KeyError: 'one'
Возникает исключение KeyError
, поскольку ключ чувствителен к регистру. Чтобы избежать этой ошибки, можно добавить код, аналогичный приведенному ниже примеру, для проверки ключа:
, если «один» в myNumberValues: print("Ключ 'один' существует.") еще: print("Ключ 'one' не существует.")
Итерация по словарю в Python
Словари Python имеют встроенную поддержку для итерации по своим ключам. Чтобы перебрать словарь Python и получить доступ ко всем его ключам, используйте цикл for
:
чисел = {'Один': 1, 'Два': 'Два', 'Три': 3.0} для ключа в цифрах: печать (ключ)
Это генерирует следующий вывод:
Один Два Три
Если вы хотите получить доступ к значениям словаря вместо ключей, измените на
цикл следующим образом:
для ключа в цифрах: печать (числа [ключ])
Это генерирует следующий вывод:
1 Два 3.0
Python предоставляет несколько встроенных методов, поддерживающих доступ к ключам и значениям словаря.
-
keys()
: Получает все ключи в словаре. -
values()
: Получает все значения в словаре. -
items()
: Создает кортежи, содержащие пары ключ-значение словаря.
Используя перечисленные выше встроенные методы, вы можете перебирать ключи и значения словаря, используя следующий цикл for
:
для ключа, значение в number. items(): печать (ключ, "содержит", значение)
Результат должен выглядеть следующим образом:
Один содержит 1 Два содержит Два Three содержит 3.0
Создание словаря Python из другого словаря
Возможно, вам потребуется создать новый словарь на основе ключей и значений из другого словаря. В этих случаях интерпретация Python очень полезна. Например, приведенное ниже понимание выбирает определенные ключи на основе определенных критериев.
чисел = {'Один': 1, 'Два': 'Два', 'Три': 3.0} new_numbers = dict([ (k, v) для k, v в number.items() если к[0] == "Т" ]) для ключа, значение в new_numbers.items(): печать (ключ, "содержит", значение)
Два содержит Два Three содержит 3.0
Пример кода получает пары ключ-значение в словаре чисел
с помощью метода items()
. Затем он проверяет, является ли первый символ ключа T
. Если это так, то пара ключ-значение появляется в кортеже, который затем используется для создания нового словаря с использованием dict()
метод.
Как установить значение словаря в Python
В приведенном ниже примере демонстрируется синтаксис для добавления новой пары ключ-значение в существующий словарь Python.
словарь['ключ'] = значение
Чтобы добавить новую пару ключ-значение в словарь чисел
, используемый в этом руководстве, используйте следующий код:
чисел['Четыре'] = 4 печать (числа ['Четыре'])
4
Вы также можете изменить существующее значение словаря. Вы должны убедиться, что значение, которое вы изменяете, действительно существует в словаре. По этой причине следующий код является безопасным подходом:
, если «Один» в number.keys(): числа ['Один'] = 1,00001
Этот код безопаснее, потому что он использует предложение if
, чтобы убедиться, что обновленное значение добавлено в ваш словарь, только если ключ One
существует. Без предложения if
, если бы ключ Один
не существовал, вы бы непреднамеренно добавили новую запись в словарь чисел
.
Как удалить значение словаря в Python
Существуют различные способы удаления значения словаря в Python. Первый метод использует 9Ключевое слово 0017 del , за которым следует ключ, в котором хранится значение, которое вы хотите удалить.
числовое значение['Один']
При использовании ключевого слова del
Python не возвращает измененный словарь. Это затрудняет понимание того, как операция повлияла на существующий словарь. Более безопасным методом удаления значений из словаря является использование метода pop()
, как показано ниже:
, если 'One' в number.keys(): удалено = number.pop('Один') print("Удалено", удалено)
Removed 1.00001
Эта версия кода имеет несколько преимуществ, одно из которых заключается в том, что метод pop() возвращает значение, удаленное из словаря. Это позволяет сохранить значение в переменной. Второе преимущество состоит в том, что
pop()
более понятен в своем назначении. Точно так же сохранение значения в переменной позволяет при необходимости добавить значение обратно в словарь.
Если вам нужно удалить последнее значение из словаря, используйте 9Вместо этого метод 0017 popitem() . Функция возвращает как ключ, так и значение из словаря.
ключ, значение = числа.popitem() печать (ключ, значение)
Четыре 4
Поскольку возвращаются и ключ, и значение, возможно восстановление после случайного удаления. Вы также можете сообщить пользователю, что именно было удалено из словаря.
Python также позволяет полностью очистить словарь с помощью метода clear()
. В этом случае метод ничего не возвращает, поэтому единственный вариант восстановления — сделать копию словаря перед его очисткой.
чисел.очистить() печать (числа)
{}
Как получить длину словаря в Python
Чтобы найти длину словаря в Python, используйте метод len()
следующим образом:
numbers = {'One' : 1 , «Два»: «Два», «Три»: 3,0} лен(числа)
3
Возвращаемое значение отображает количество пар ключ-значение, существующих в словаре чисел
.
Методы встроенного словаря Python
Словари Python поддерживают несколько встроенных методов, которые можно использовать для различных задач. В приведенном ниже списке содержатся методы словаря Python, не описанные в другом месте этого руководства.
copy()
: Создает поверхностную копию словаря. Тот факт, что копия неглубокая, важен только при работе с составными объектами. Неглубокая копия предоставляет ссылки на объекты, найденные внутри составного объекта, а не создает новые объекты для скопированного составного объекта.fromkeys()
: Создает копию ключей словаря в новом словаре, но со значениями, установленными наНет
. Например, кодnumbers_copy = number.fromkeys(numbers.keys())
создает копию только ключей в словареnumbers
и помещает их вnumbers_copy
, но значения вnumbers_copy
все установлены. доНет
.get()
: Получает значение для указанного ключа. Если указанный ключ не существует,Метод get()
возвращает значение по умолчанию. Если значение по умолчанию отсутствует, тоget()
возвращаетNone
. Эта функция никогда не возвращает ключевую ошибку. Например, в следующем кодеnumbers.get('Eight', 8.0)
функцияget()
возвращает значение8.0
, предполагая, что ключEight
не существует.setdefault()
: Предоставляет значение по умолчанию для определенного ключа, когда заранее известно, что словарь должен содержать указанный ключ. Если значение по умолчанию не указано, то Python вставляетНет
вместо значения. Например, при вызове этого метода:numbers.setdefault('Eight', 8.0)
словарьчисел
содержит ключEight
со значением8.0
после вызова, когда ключ не уже существует. Во всех случаях функция возвращает текущее значение ключа при выходе. Если ключ уже существует, функцияsetdefault()
возвращает его текущее значение, а не создает новый ключ с новым значением.update()
: объединяет два словаря вместе. Пары ключ-значение из словаря методаupdate()
появляются в конце существующего словаря. Следовательно, на примереnumbers.update({'Five': 5, 'Six': 6})
, ключи'Five'
и'Six'
добавляются в конец словарячисел
. Если ключи уже существуют, их значения обновляются значениями из обновленного словаря.
Learn Python 3: Памятка по словарям
Доступ и запись данных в словарь Python
Доступ к значениям в словаре Python можно получить, поместив ключ в квадратные скобки рядом со словарем. Значения можно записать, поместив ключ в квадратные скобки рядом со словарем и используя оператор присваивания ( =
). Если ключ уже существует, старое значение будет перезаписано. Попытка доступа к значению с помощью несуществующего ключа вызовет ошибку 9.0017 Ошибка ключа .
Чтобы проиллюстрировать эту обзорную карточку, во второй строке примера блока кода показан способ доступа к значению с использованием ключа "песня"
. Третья строка кодового блока перезаписывает значение, соответствующее ключу «песня»
.
my_dictionary = {"song": "Estranged", "artist": "Guns N' Roses"}
print(my_dictionary["song"])
my_dictionary["song"] = "Paradise City"
Синтаксис словаря Python
Синтаксис словаря Python начинается с левой фигурной скобки ( {
), заканчивается правой фигурной скобкой ( }
) и содержит ноль или более ключ: значение
элементов, разделенных запятыми ( ,
). Ключ
отделяется от значения
двоеточием ( :
).
Roster = {"q1": "Ashley", "q2": "Dolly"}
Объединение словарей с помощью метода
. update()
в Python Имея два словаря, которые необходимо объединить, Python упрощает эту задачу с помощью функции .update()
.
Для dict1.update(dict2)
пары ключ-значение dict2
будут записаны в словарь dict1
.
Для ключей в и dict1
и dict2
значение в dict1
будет перезаписано соответствующим значением в dict2
.
dict1 = {'цвет': 'синий', 'форма': 'круг'}
dict2 = {'color': 'red', 'number': 42}
dict1.update(dict2)
# dict1 теперь {'color': 'red', 'shape': 'circle', 'number': 42}
Типы словарных значений
Python позволяет значениям в словаре быть любого типа — строки, целого числа, списка, другого словаря, логического значения и т. д. Однако ключа должны быть всегда быть неизменяемым типом данных, таким как строки, числа или кортежи.
В примере блока кода вы можете видеть, что ключи являются строками или числами (int или float). Значения, с другой стороны, представляют собой множество различных типов данных.
словарь = {
1: 'привет',
'два': True,
'3': [1, 2, 3],
'Четыре': {'весело': 'дополнение' },
5.0: 5.5
}
Словари Python
Словарь Python представляет собой неупорядоченный набор элементов. Он содержит данные в виде набора пар ключ: значение.
my_dictionary = {1: "Лос-Анджелес Лейкерс", 2: "Хьюстон Рокетс"}
Методы словаря «ключ-значение»
При попытке просмотра информации в словаре Python существует несколько методов, которые возвращают объекты, содержащие ключи и значения словаря.
-
.keys()
возвращает ключи через объектdict_keys
. -
. values()
возвращает значения через объектdict_values
. -
.items()
возвращает как ключи, так и значения через объектdict_items
.
ex_dict = {"a": "муравьед", "b": "шмель", "c": "гепард"}
ex_dict.keys()
# dict_keys(["a","b"," c"])
ex_dict.values()
# dict_values(["муравьед", "шмель", "гепард"])
ex_dict.items()
# dict_items([("a","муравьед" "),("b","bumblebee"),("c","cheetah")])
Метод get() для словаря
Python предоставляет метод .get()
для доступа к словарь
значение, если оно существует. Этот метод занимает ключ
в качестве первого аргумента и необязательное значение по умолчанию в качестве второго аргумента, и он возвращает значение для указанного ключа
, если ключ
находится в словаре. Если второй аргумент не указан и ключ
не найден, то возвращается None
.
# без значения по умолчанию
{"name": "Victor"}.get("name")
# возвращает "Victor"
{"name": "Victor"}.get("nickname")
# возвращает Нет
# по умолчанию
{"name": "Victor"}.get("псевдоним", "псевдоним не является ключом")
# возвращает "никнейм не является ключом"
.pop() Метод
для словарей в Python Словари Python могут удалять пары ключ-значение с помощью метода .pop()
. Метод принимает ключ в качестве аргумента и удаляет его из словаря. В то же время он также возвращает значение, которое удаляет из словаря.
known_museums = {'Вашингтон': 'Смитсоновский институт', 'Париж': 'Лувр', 'Афины': 'Музей Акрополя'}
known_museums.pop('Афины')
print(famous_museums) # {'Вашингтон': 'Смитсоновский институт', 'Париж': 'Ле Лувр'}
Mini Arrow Left IconPrevious
Next Значок мини-стрелки вправо
Курс