Top.Mail.Ru

Словари Python (dict): ключи, значения, методы работы и операции

В статье мы подробно поговорим о том, что такое словарь символов Python, какие бывают ключи и значения и как с ними работать.
Словари Python (dict): ключи, значения, методы работы и операции
В статье мы подробно поговорим о том, что такое словарь символов Python, какие бывают ключи и значения и как с ними работать.

1. Что такое словари Питон (Python dict)

Словари в Python — это структура данных, которая позволяет хранить коллекции пар «ключ — значение». Доступ к значению осуществляется через его уникальный ключ, в то время как сами значения могут повторяться.

Например:
То есть Л. Н. Толстой написал множество произведений, но у каждого из них один автор.
Если мы знаем ключ, в нашем случае — название романа, то без проблем найдем значение — автора.

Для чего применяются словари

Словари в Python нужны разработчикам, чтобы хранить большие объемы данных, а также быстро и просто извлекать нужное значение, используя ключ. Рассмотрим несколько примеров.
  • Подсчет каких-либо предметов. В этом случае ключами будут названия предметов, а значениями — их количество.
text = 'hello world hello'
word_counts = {}
for word in text.split():
    word_counts[word] = word_counts.get(word, 0) + 1
print(word_counts)  # Выведет: {'hello': 2, 'world': 1}
  • Хранение сложных данных. Словари могут содержать другие словари, что позволяет создавать сложные структуры данных.
students = {
    'Alice': {'age': 25, 'courses': ['Math', 'Physics']},
    'Bob': {'age': 22, 'courses': ['Biology', 'Chemistry']}
}
print(students['Alice']['courses'])  # Выведет: ['Math', 'Physics']
  • Группировка данных по заданному критерию. Благодаря этому можно упорядочить и структурировать информацию.
data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 25}
]
grouped_data = {}
for item in data:
    age = item['age']
    if age not in grouped_data:
        grouped_data[age] = []
    grouped_data[age].append(item['name'])
print(grouped_data)  # Выведет: {25: ['Alice', 'Charlie'], 30: ['Bob']}
  • Кэширование и мемоизация результатов вычислений. Это помогает улучшить производительность кода.
factorial_cache = {}
def factorial(n):
    if n in factorial_cache:
        return factorial_cache[n]
    if n = 0:
        result = 1
    else:
        result = n * factorial(n-1)
    factorial_cache[n] = result
    return result
print(factorial(5))  # Вычисление и кэширование факториала 5
print(factorial_cache)  # Выведет: {5: 120, 4: 24, 3: 6, 2: 2, 1: 1, 0: 1}

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

Ключи Python должны быть неизменяемыми типами данных — например, строками, числами или кортежами. Если сделать ключом список, словарь или другой изменяемый тип данных, возникнет ошибка. А вот значения словаря Python могут быть абсолютно любыми, в том числе и другими словарями.
invalid_dict = {[1, 2, 3]: 'invalid'}  # Ошибка
valid_dict = {(1, 2, 3): 'valid'}  # Корректно

hr_info = {
'ученик1': {'имя': 'Петр', 'класс': '5'},
'ученик2': {'имя': 'Алексей', 'класс': '7'},
'ученик3': {'имя': 'Михаил', 'класс': '11'}}
print(hr_info['ученик2']['имя'])}
Словари являются изменяемыми (mutable) структурами данных. Их содержимое можно редактировать после создания — добавлять новые пары «ключ — значение», изменять существующие значения или удалять элементы.
student['age'] = 26  # Изменение значения по ключу
student['grade'] = 'A'  # Добавление новой пары
del student['courses']  # Удаление пары по ключу
Ключи нельзя повторять. Если добавить идентичный ключ, Python сохранит только ту версию, которая была последней.
dict = {
'name': 'Марина', 'name': 'Марина'}
print(dict)
{'цвет': 'синий'}
Словари — это неупорядоченные системы данных. Но с версии 3.7 порядок вставки ключей сохраняется.
dict = {
'цвет': 'белый', 'наименование': 'свитер', 'материал': 'шерсть'}
print(dict['наименование'],dict['материал'])
свитер шерсть

Как создавать словари Питон

Способ 1: с помощью фигурных скобок

Это самый простой способ создания словарь в Python. Сначала указывается ключ, затем ставится двоеточие, и добавляется соответствующее значение. Все это помещается в фигурные скобки.
movie = {
'название':'Мстители', 
'режиссер':'Джосс Уидон',
'год':'2012'}
}(movie)

Способ 2: с помощью функций словарей Python — dict и zip () и dict ()

dict () — ключи и значения здесь задаются вручную.
dict = dict(class = 'mammals', squad = 'artiodactyls', family = 'deer')
printdict)
{'class': 'mammals', 'squad': artiodactyls, 'family': 'deer'}

Способ 3: с помощью списка кортежей

В этом случаем первым элементом будет ключ, а вторым — значение.
item = [('питомец', 'собака'), ('порода', 'мопс'), ('кличка', 'Жора')]
item_dict = dict(item)
print(item_dict)
{'питомец': 'собака', 'порода': 'мопс', 'кличка': 'Жора'}
zip () и dict () также можно использовать вместе для создания словаря из двух списков — одного с ключами, другого со значениями.
keys = ['форма', 'цвет', 'материал', 'стоимость']
values = ['круглый', 'черный', 'кожа', 20000]
info = dict(zip(keys, values))
print(info)
{'форма': 'круглый', 'цвет': 'черный', 'материал': 'кожа', 'стоимость': 20000}

Способ 4: с помощью метода fromkeys ()

Можно создать словарь с заданными ключами и одним значением по умолчанию для всех ключей.
dict = dict.fromkeys(['красный', 'синий', 'желтый', зеленый'], 100)
print(dict)
{'красный': 100, 'синий': 100, 'желтый': 100, 'зеленый': 100}

Способ 5: с помощью генераторов словарей

Они позволяют создавать словари на основе списков и строк. Эти инструменты помогают проводить подсчеты, сравнение, а также преобразовывать типы данных в условия.
dict1 = ['w': 5, 'q': 10, 'r': 15, 's': 20: 'g': 25]
double_dict1 = {k: v * 5 for (k, v) in dict1.items()}
print(double_dict1)
{'g':125, 'w': 25, 'r': 75, 'q': 50, 's': 100}

Как создать пустой словарь в Python

Это можно сделать двумя способами:
  1. С помощью фигурных скобок {} без указания каких-либо элементов внутри них: `dict = {}`.
  2. Благодаря встроенной функции dict (), которая возвращает новый пустой словарь: `dict = dict ()`.

Основные операции словарей

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

Выводим значение по ключу

Обращение к ключу словаря Python позволяет извлечь его значение. Для этого нужно использовать квадратные скобки:
# Создаем словарь
dict = {
  'Война и Мир': 'Толстой','Капитанская дочка': 'Пушкин'
}
# Указываем значение в квадратных скобках 
war_and_peace_author = dict['Война и мир']
print(warandpeaceauthor)
# В итоге получается значение
> Толстой 

Проверяем наличие ключа

Используем оператор in:
if 'name' in person:
    print('Name is present')
else:
    print('Name is not present')

Добавляем элемент в словарь Питон

Задаем ключ в квадратных скобках, используем оператор присваивания и добавляем значение:
dict['Капитанская дочка'] = 'Пушкин'
print(dict)
> {'Война и мир': 'Толстой', 'Капитанская дочка': 'Пушкин'}

Удаляем элемент из словаря

У словаря Питон есть разные команды. Одна из них — del. С ее помощью можно удалить элемент словаря. Для этого нужно ввести ключ, а значение удалится вместе с ним:
del dict['Капитанская дочка']
print(dict)
> {'Война и мир': 'Толстой'}

Меняем значение ключа

Значение изменится, если в квадратных скобках мы напишем уже существующий ключ, а через знак равенства укажем его новое значение:
dict['Война и мир'] = 'Пушкин'
В итоге значение должно поменяться, на:
print(dict)
> {'Война и мир': 'Пушкин', 'Капитанская дочка': 'Толстой'}

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

В Python 3.9+ можно использовать оператор | для объединения словарей:
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged_dict = dict1 | dict2
print(merged_dict)  # Выведет: {'a': 1, 'b': 3, 'c': 4}
Для более ранних версий Python можно использовать метод update (). Подробнее о нем мы поговорим дальше.

Методы словарей

Это определенный набор функций Python, которые созданы совместно со словарем. Эти методы позволяют эффективно манипулировать, управлять доступом и преобразовывать словарь данных. Они во многом упрощают работу со словарями Python. Основные из них предлагаем рассмотреть на примерах.
  1. items() возвращает все пары «ключ — значение» в виде списка кортежей.
book_authors = {
    'Война и мир': 'Толстой',
    'Капитанская дочка': 'Пушкин'
}
print(book_authors.items())  # dict_items([('Война и мир', 'Толстой'), ('Капитанская дочка', 'Пушкин')])
2. get () — возвращает значение по ключу, если ключ существует, иначе возвращает значение по умолчанию, если оно указано.
print(book_authors.get('Мертвые души', 'Не найдено'))  # Гоголь
print(book_authors.get('Преступление и наказание', 'Не найдено'))  # Не найдено
3. keys() — возвращает все ключи.
print(book_authors.keys())  # dict_keys(['Война и мир', 'Капитанская дочка'])
4. values() — возвращает все значения.
print(book_authors.values())  # dict_values(['Толстой', 'Пушкин'])
5. update () — обновляет словарь, добавляя пары «ключ — значение» из другого словаря.
new_books = {'Мертвые души': 'Гоголь', 'Идиот': 'Достоевский'}
book_authors.update(new_books)
print(book_authors)  # {'Война и мир': 'Толстой', 'Капитанская дочка': 'Пушкин', 'Мертвые души': 'Гоголь', 'Идиот': 'Достоевский'}
6. pop () — удаляет элемент по ключу и возвращает его значение. Если ключ не найден, то исполнение данного метода приведет к ошибке KeyError. Этого можно избежать, если указать значение по умолчанию.
author = book_authors.pop('Капитанская дочка')
print(author)  # 'Пушкин'
print(book_authors) # {'Война и мир': 'Толстой', 'Мертвые души': 'Гоголь', 'Идиот': 'Достоевский'}
7. popitem() — удаляет и возвращает последнюю добавленную пару «ключ — значение».
book_authors = {
    'Война и мир': 'Толстой',
    'Капитанская дочка': 'Пушкин',
    'Мертвые души': 'Гоголь'
}
8. clear() — удаляет все элементы из словаря.
book_authors.clear()
print(book_authors)  # Выведет {}
9. copy() — возвращает поверхностную копию словаря.
original = {'a': 1, 'b': 2}
copy_dict = original.copy()
print(copy_dict)  # Выведет: {'a': 1, 'b': 2}

10. setdefault() — возвращает значение по ключу, если ключ существует. Если нет, добавляет ключ со значением по умолчанию и возвращает это значение.
print(book_authors.setdefault('Преступление и наказание', 'Достоевский'))  # Достоевский
print(book_authors)  # {'Война и мир': 'Толстой', 'Капитанская дочка': 'Пушкин', 'Мертвые души': 'Гоголь', 'Идиот': 'Достоевский', 'Преступление и наказание': 'Достоевский'}

Коротко о главном

Словари Python представляют собой удобную и эффективную структуру данных, которая позволяет хранить информацию в виде пар «ключ — значение». Они широко применяются в программировании для различных целей. Например, подсчета элементов, хранения данных, установления соответствий и оптимизации памяти.

При работе со словарями нужно учитывать их особенности. К примеру, ключи в словарях уникальны и относятся к неизменяемым типам данных — строкам, числам или кортежам. В то время как значения могут повторяться и относиться к любому типу данных.
Словари можно создавать пятью разными способами:
  • перечислением пар ключей и значений;
  • функцией dict и zip () и dict ();
  • списком кортежей;
  • методом fromkeys ();
  • генератором словарей.

Операции словарей Python включают различные методы и способы работы с данными, хранящимися в виде пар «ключ — значение». К основным операциям относятся:
  • вывод значения по ключу;
  • добавление элемента;
  • проверка наличия ключа;
  • удаление элемента;
  • изменение значения ключа.
Для более удобной работы со словарями есть различные методы и команды. С их помощью можно создавать копии, обновлять, извлекать значения по ключам и выполнять множество других операций со словарями.

Если вы дочитали статью до конца, вам точно нужно развиваться в IT-сфере. Чтобы узнать еще больше о словарях Python, научиться писать код и найти востребованную профессию с высокой зарплатой, приходите на курс по курс по Python-разработке от ProductStar. Там мы обучаем с нуля на кейсах реальных компаний и помогаем выйти на первую работу еще до окончания курса.
Статья написана при участии эксперта — Данилы Логунова, разработчика РБК Pro
Скидка 65% и подарки на 135 000 ₽
Осенняя распродажа!
00:00:00:00
дн.
час.
мин.
сек.
Получить консультацию по курсам для разработчиков
Java / Frontend/ Web / Python
Расскажем детали курса, а также забронируем текущую стоимость