Словари в Python

Назад в начало

Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение».

# Создание словаря c помощью литерала

student = {'name': 'Ivan', 'age': 12}
credentials = {'email': 'hacker1337@mail.ru', 'password': '123456'}

# Создание словаря c помощью функции dict()

student = dict(name='Ivan', age=12)
credentials = dict(email='hacker1337@mail.ru', password='123456')

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

# Получаем значение с ключом 'name'

student = dict(name='Ivan', age=12)
print(student['name']) # -> Ivan

Обновление существующих значений происходит абсолютно также.

# Получаем значение с ключом 'name'

student = dict(name='Ivan', age=12)
student['name'] = 'Vasya'

print(student['name']) # -> Vasya

Для удаления ключа и соответствующего значения из словаря можно использовать del

# Удаление ключа 'age'

student = dict(name='Ivan', age=12)
del student['age']

print(student) # -> {'name': 'Ivan'}

Метод get() возвращает значение по указанному ключу. Если указанного ключа не существует, метод вернёт None. Также можно указать значение по умолчанию, которое будет возвращено вместо None, если ключа в словаре не окажется.

# Использование метода get()

student = dict(name='Ivan', age=12)

print(student.get('name'))     # -> Ivan
print(student.get('lastname')) # -> None
print(student.get('lastname', 'No key')) # -> No key

Метод pop() удаляет ключ и возвращает соответствующее ему значение.

# Использование метода pop()

sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger')

model = sneakers.pop('model')

print(sneakers) # -> {'brand': 'Adidas', 'price': '9990 RUB'}
print(model)    # -> Nite Jogger

Метод keys() возвращает специальную коллекцию ключей в словаре.

# Использование метода keys()

sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger')

print(sneakers.keys()) # -> dict_keys(['brand', 'price', 'model'])

# dict_keys - это неизменяемая коллекция элементов.

keys = list(sneakers.keys())
print(keys) # -> ['brand', 'price', 'model']

Метод values() возвращает специальную коллекцию значений в словаре.

# Использование метода values()

sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger')

print(sneakers.values()) # -> dict_values(['Adidas', '9990 RUB', 'Nite Jogger'])

# dict_values - это неизменяемая коллекция элементов.

values = list(sneakers.values())
print(values) # -> ['Adidas', '9990 RUB', 'Nite Jogger']

Метод items() возвращает пары «ключ — значение» в формате кортежей.

# Использование метода items()

sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger')

print(sneakers.items()) # -> dict_items([('brand', 'Adidas'), ('price', '9990 RUB'), ('model', 'Nite Jogger')])

# dict_items - это неизменяемая коллекция элементов.

items = list(sneakers.items())
print(items) # -> [('brand', 'Adidas'), ('price', '9990 RUB'), ('model', 'Nite Jogger')]

sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger')

# Вывод ключей словаря с помощью цикла for

for key in sneakers:
    print(key)

# -> brand
# -> price
# -> model

# Вывод значений словаря с помощью цикла for

for value in sneakers.values():
    print(value)

# -> Adidas
# -> 9990 RUB
# -> Nite Jogger

# Вывод ключей и значений словаря с помощью цикла for

for key, value in sneakers.items():
    print(key, value)

# -> brand Adidas
# -> price 9990 RUB
# -> model Nite Jogger

Метод setdefault() возвращает значение ключа, но если его нет, создает ключ с указанным значением (по умолчанию None).

# Метод setdefault()

student = dict(name='Ivan', age=12)
student.setdefault('lastname', 'Ivanov')

print(student) # -> {'name': 'Ivan', 'age': 12, 'lastname': 'Ivanov'}

Решение задач

1. Пользователь

# Пользователь вводит имя, фамилия, возраст. Создайте словарь user и запишите данные пользователя в него.
firstname = input('Enter your firstname: ')
lastname = input('Enter your lastname: ')
age = input('Enter your age: ')

user = dict(firstname=firstname, lastname=lastname, age=age)
print(user)

2. Найти слово

# Выведите самое часто встречающееся слово в введенной строке.
list_of_words = ['hello', 'hello', 'hi']
words = {}

for word in list_of_words:
    words[word] = words.get(word, 0) + 1

# Функция max может получать функцию в качестве второго аргумента
freq_word = max(words, key=words.get)

print(freq_word)

Задачи для самостоятельного решения

1. Фрукты

Пользователь вводит число K - количество фруктов. Затем он вводит K фруктов в формате: название фрукта и его количество. Добавьте все фрукты в словарь, где название фрукта - это ключ, а количество - значение. Например:

# Ввод:
>> 3 # Количество фруктов
>> Яблоко
>> 3
>> Апельсин
>> 3
>> Мандарин
>> 10
# Вывод:
>> {'Яблоко': 3, 'Апельсин': 3, 'Мандарин': 10}

2. Старший и младший

Пользователь вводит число N. Затем он вводит личные данные (имя и возраст) своих N друзей. Создайте список friends и добавьте в него N словарей с ключами name и age. Найдите самого младшего из друзей и выведите его имя.

# Ввод:
>> 3 # Количество друзей
>> Иван
>> 11
>> Саша
>> 12
>> Леша
>> 10
# Вывод:
>> Леша

3. Еще немного о друзьях

Пользователь вводит число N. Затем он вводит личные данные (имя и возраст) своих N друзей. Создайте список friends и добавьте в него N словарей с ключами name и age. Выведите средний возраст всех друзей и самое длинное имя.

# Ввод:
>> 3 # Количество друзей
>> Иван
>> 12
>> Иннокентий
>> 20
>> Леша
>> 10
# Вывод:
>> 14
>> Иннокентий

4. Английский словарь

"Пора учить английский язык", - сказал себе Степа и решил написать программу для изучения английского языка. Программа получает на вход слово на английском языке и несколько его переводов на русском языке. Составьте словарь, в котором ключ - это английское слово, а значение - это список русских слов. В этой задаче нужно использовать строчный метод split().

# Ввод:
>> 4 # Количество слов
>> apple - яблоко
>> orange - оранжевый, рыжий, апельсин
>> grape - виноград, виноградный, гроздь
>> easy - простой, легкий, нетрудный, удобный, несложный
# Вывод:
>> {'apple': ['яблоко'], 'orange': ['оранжевый', 'рыжий', 'апельсин'], 'grape': ['виноград', 'виноградный', 'гроздь'], 'easy': ['простой', 'легкий', 'нетрудный', 'удобный', 'несложный']}