Python: уроки, справочник и задачи

Словари в Python: задачи с решениями

Раздел: Словари в Python · Обновлено 31.10.2026

Словари в Python хранят данные парами ключ-значение и дают быстрый доступ по ключу, поэтому на них строится подсчет, группировка и поиск. Здесь собраны 30 задач на словари с готовыми решениями: от подсчета элементов списка до слияния, сортировки и фильтрации. Попробуйте сначала решить задачу сами, а потом сверьтесь с кодом.

Словари в python (dictionaries) - это структуры данных в языке программирования Python, которые позволяют хранить данные в виде пар ключ-значение. Ключи в словарях уникальны, и они используются для доступа к соответствующим значениям. Основные принципы работы со словарями и их применение.

Словари в Python
Фото: Muffet / CC BY 2.0, Wikimedia Commons
Содержание статьи
  1. Задача 1: Подсчет уникальных элементов в списке
  2. Задача 2: Объединение двух словарей
  3. Задача 3: Получение ключа с максимальным значением
  4. Задача 4: Поиск ключа по значению
  5. Задача 5: Удаление элементов из словаря
  6. Задача 6: Проверка наличия ключа в словаре
  7. Задача 7: Поиск пересечения ключей в двух словарях
  8. Задача 8: Обновление значений в словаре по ключу
  9. Задача 9: Сортировка словаря по значениям
  10. Задача 10: Вычисление среднего значения из словаря
  11. Задача 11: Проверка идентичности словарей
  12. Задача 12: Получение подмножества ключей
  13. Задача 13: Объединение значений одинаковых ключей из списка словарей
  14. Задача 14: Группировка элементов списка по значению
  15. Задача 15: Поиск всех значений, удовлетворяющих условию
  16. Задача 16: Проверка наличия дубликатов в словаре
  17. Задача 17: Объединение списков значений одинаковых ключей в словаре
  18. Задача 18: Обратное формирование словаря
  19. Задача 19: Поиск ключа с наибольшим значением
  20. Задача 20: Слияние словарей с обновлением значений
  21. Задача 21: Фильтрация словаря по условию
  22. Задача 22: Объединение двух списков в словарь
  23. Задача 23: Проверка наличия подстроки в значениях словаря
  24. Задача 24: Объединение значений списков по ключу
  25. Задача 25: Вычисление разницы между значениями словаря
  26. Задача 26: Фильтрация списка словарей по условию
  27. Задача 27: Подсчет уникальных букв в слове
  28. Задача 28: Сравнение двух словарей
  29. Задача 29: Поиск ключа с минимальным значением
  30. Задача 30: Вычисление суммы значений словаря
  31. Приемы, которые пригодятся в задачах
  32. Дополнительные задачи
  33. Частые вопросы

Ниже представлен список задач по словарям. Решая практические задачи по словарям, вы закрепите свои теоретические знания на практике.

Задача 1: Подсчет уникальных элементов в списке

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

Решение:

def count_unique_elements(input_list):
    element_count = {}
    for element in input_list:
        if element in element_count:
            element_count[element] += 1
        else:
            element_count[element] = 1
    return element_count

Задача 2: Объединение двух словарей

Необходимо объединить два словаря в один, чтобы значения с одинаковыми ключами суммировались.

Решение:

def merge_dictionaries(dict1, dict2):
    merged_dict = dict1.copy()
    for key, value in dict2.items():
        if key in merged_dict:
            merged_dict[key] += value
        else:
            merged_dict[key] = value
    return merged_dict

Задача 3: Получение ключа с максимальным значением

Требуется написать функцию, которая принимает словарь и возвращает ключ с максимальным значением.

Решение:

def key_with_max_value(input_dict):
    max_key = max(input_dict, key=input_dict.get)
    return max_key

Задача 4: Поиск ключа по значению

Напишите функцию, которая принимает на вход словарь и значение, а затем возвращает список ключей, соответствующих этому значению.

Решение:

def find_keys_by_value(input_dict, value):
    keys_list = [key for key, val in input_dict.items() if val == value]
    return keys_list

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

Реализуйте функцию, которая удаляет из словаря все пары ключ-значение, где значение меньше заданного порога.

Решение:

def remove_elements_below_threshold(input_dict, threshold):
    keys_to_remove = [key for key, value in input_dict.items() if value < threshold]
    for key in keys_to_remove:
        del input_dict[key]
    return input_dict

Задача 6: Проверка наличия ключа в словаре

Напишите функцию, которая принимает словарь и ключ, и возвращает True, если такой ключ уже существует в словаре, и False в противном случае.

Решение:

def check_key_existence(input_dict, key):
    return key in input_dict

Задача 7: Поиск пересечения ключей в двух словарях

Напишите функцию, которая принимает на вход два словаря и возвращает список ключей, которые присутствуют в обоих словарях.

Решение:

def find_common_keys(dict1, dict2):
    common_keys = [key for key in dict1.keys() if key in dict2]
    return common_keys

Задача 8: Обновление значений в словаре по ключу

Реализуйте функцию, которая обновляет значение по заданному ключу в словаре. Если ключ не существует, он должен быть добавлен в словарь.

Решение:

def update_dictionary_value(input_dict, key, new_value):
    input_dict[key] = new_value
    return input_dict

Задача 9: Сортировка словаря по значениям

Напишите функцию, которая принимает на вход словарь и возвращает новый словарь, отсортированный по значениям (по возрастанию или убыванию).

Решение:

def sort_dictionary_by_values(input_dict, reverse=False):
    sorted_dict = dict(sorted(input_dict.items(), key=lambda item: item[1], reverse=reverse))
    return sorted_dict

Задача 10: Вычисление среднего значения из словаря

Напишите функцию, которая принимает на вход словарь, содержащий числовые значения, и возвращает среднее значение этих чисел.

Решение:

def calculate_average(input_dict):
    if len(input_dict) == 0:
        return 0
    return sum(input_dict.values()) / len(input_dict)

Задача 11: Проверка идентичности словарей

Реализуйте функцию для проверки идентичности двух словарей, то есть проверку на то, что они содержат одни и те же ключи и значения.

Решение:

def check_dictionary_equality(dict1, dict2):
    return dict1 == dict2

Задача 12: Получение подмножества ключей

Напишите функцию, которая принимает на вход словарь и список ключей, и возвращает новый словарь, содержащий только указанные ключи.

Решение:

def get_subset_of_keys(input_dict, keys_list):
    subset_dict = {key: input_dict[key] for key in keys_list if key in input_dict}
    return subset_dict

Задача 13: Объединение значений одинаковых ключей из списка словарей

Реализуйте функцию, которая принимает на вход список словарей и объединяет значения с одинаковыми ключами в новом словаре.

Решение:

def merge_values_with_same_keys(dict_list):
    merged_dict = {}
    for d in dict_list:
        for key, value in d.items():
            if key in merged_dict:
                merged_dict[key] += value
            else:
                merged_dict[key] = value
    return merged_dict

Задача 14: Группировка элементов списка по значению

Напишите функцию, которая принимает на вход список кортежей (ключ, значение) и возвращает словарь, в котором значения группируются по ключам.

Решение:

def group_elements_by_value(input_list):
    grouped_dict = {}
    for key, value in input_list:
        if value in grouped_dict:
            grouped_dict[value].append(key)
        else:
            grouped_dict[value] = [key]
    return grouped_dict

Задача 15: Поиск всех значений, удовлетворяющих условию

Напишите функцию, которая принимает на вход словарь и условие, а затем возвращает список всех значений, удовлетворяющих данному условию.

Решение:

def find_values_by_condition(input_dict, condition):
    values_list = [value for value in input_dict.values() if condition(value)]
    return values_list

Задача 16: Проверка наличия дубликатов в словаре

Реализуйте функцию для проверки наличия дубликатов значений в словаре.

Решение:

def check_for_duplicates(input_dict):
    values_set = set()
    for value in input_dict.values():
        if value in values_set:
            return True
        else:
            values_set.add(value)
    return False

Задача 17: Объединение списков значений одинаковых ключей в словаре

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

Решение:

def merge_lists_with_same_keys(dict_list):
    merged_dict = {}
    for d in dict_list:
        for key, value_list in d.items():
            merged_dict.setdefault(key, []).extend(value_list)
    return merged_dict

Задача 18: Обратное формирование словаря

Напишите функцию, которая принимает на вход словарь и возвращает новый словарь, в котором ключи и значения поменяны местами.

Решение:

def reverse_dictionary(input_dict):
    reversed_dict = {v: k for k, v in input_dict.items()}
    return reversed_dict

Задача 19: Поиск ключа с наибольшим значением

Напишите функцию, которая принимает на вход словарь и возвращает ключ с наибольшим значением.

Решение:

def find_key_with_max_value(input_dict):
    if not input_dict:
        return None
    max_value = max(input_dict.values())
    key = [k for k, v in input_dict.items() if v == max_value][0]
    return key

Задача 20: Слияние словарей с обновлением значений

Реализуйте функцию, которая принимает на вход несколько словарей и объединяет их, обновляя значения для одинаковых ключей.

Решение:

def merge_dictionaries(*dicts):
    merged_dict = {}
    for d in dicts:
        for key, value in d.items():
            if key in merged_dict:
                merged_dict[key] += value
            else:
                merged_dict[key] = value
    return merged_dict

Задача 21: Фильтрация словаря по условию

Напишите функцию, которая принимает на вход словарь и условие, а затем возвращает новый словарь, содержащий только те элементы, которые удовлетворяют условию.

Решение:

def filter_dictionary_by_condition(input_dict, condition):
    filtered_dict = {k: v for k, v in input_dict.items() if condition(k, v)}
    return filtered_dict

Задача 22: Объединение двух списков в словарь

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

Решение:

def create_dictionary(keys, values):
    combined_dict = dict(zip(keys, values))
    return combined_dict

Задача 23: Проверка наличия подстроки в значениях словаря

Напишите функцию, которая принимает на вход словарь и подстроку, а затем возвращает список ключей, у которых значения содержат указанную подстроку.

Решение:

def find_keys_by_substring_value(input_dict, substring):
    keys_with_substring = [key for key, value in input_dict.items() if substring in value]
    return keys_with_substring

Задача 24: Объединение значений списков по ключу

Напишите функцию, которая принимает на вход список словарей и ключ, а затем возвращает словарь, содержащий объединенные значения всех списков по указанному ключу.

Решение:

def merge_values_by_key(dict_list, key):
    merged_dict = {}
    for d in dict_list:
        if d[key] in merged_dict:
            merged_dict[d[key]].extend(d.values())
        else:
            merged_dict[d[key]] = list(d.values())
    return merged_dict

Задача 25: Вычисление разницы между значениями словаря

Реализуйте функцию, которая принимает на вход словарь с числовыми значениями и возвращает разницу между максимальным и минимальным значением.

Решение:

def calculate_difference_between_max_and_min(input_dict):
    values = list(input_dict.values())
    difference = max(values) - min(values)
    return difference

Задача 26: Фильтрация списка словарей по условию

Напишите функцию, которая принимает на вход список словарей и условие, а затем возвращает новый список, содержащий только те словари, удовлетворяющие условию.

Решение:

def filter_list_of_dictionaries_by_condition(list_of_dicts, condition):
    filtered_list = [d for d in list_of_dicts if condition(d)]
    return filtered_list

Задача 27: Подсчет уникальных букв в слове

Напишите функцию, которая принимает на вход слово и возвращает словарь, содержащий уникальные буквы слова в качестве ключей и количество их появлений в слове в качестве значений.

Решение:

def count_unique_letters(word):
    letter_count = {}
    for letter in word:
        if letter in letter_count:
            letter_count[letter] += 1
        else:
            letter_count[letter] = 1
    return letter_count

Задача 28: Сравнение двух словарей

Реализуйте функцию, которая принимает на вход два словаря и возвращает True, если они содержат одинаковые ключи и значения, и False в противном случае.

Решение:

def compare_dictionaries(dict1, dict2):
    return dict1 == dict2

Задача 29: Поиск ключа с минимальным значением

Напишите функцию, которая принимает на вход словарь с числовыми значениями и возвращает ключ с минимальным значением.

Решение:

def find_key_with_min_value(input_dict):
    if not input_dict:
        return None
    min_value = min(input_dict.values())
    key = [k for k, v in input_dict.items() if v == min_value][0]
    return key

Задача 30: Вычисление суммы значений словаря

Напишите функцию, которая принимает на вход словарь с числовыми значениями и возвращает сумму всех значений словаря.

Решение:

def calculate_sum_of_values(input_dict):
    return sum(input_dict.values())

Приемы, которые пригодятся в задачах

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

ЗадачаКороткий способЧто происходит
Значение по умолчаниюd.get(key, 0)Нет ключа - вернется 0, без KeyError
Подсчет элементовCounter(items)Словарь вида элемент: количество
Группировка в спискиd.setdefault(k, []).append(v)Создает пустой список при первом обращении
Слияние с заменойd1 | d2Новый словарь, значения из d2 побеждают (Python 3.9+)
Слияние с суммойCounter(d1) + Counter(d2)Складывает значения одинаковых ключей
Ключ с максимумомmax(d, key=d.get)Сравнивает ключи по их значениям

Так задачи 1, 2 и 27 решаются одной строкой через Counter из модуля collections. Учтите, что сложение двух Counter отбрасывает ключи с нулевыми и отрицательными итогами.

from collections import Counter, defaultdict

print(Counter("мама"))
# Counter({'м': 2, 'а': 2})

print(Counter({"a": 1, "b": 2}) + Counter({"b": 3}))
# Counter({'b': 5, 'a': 1})

groups = defaultdict(list)
for name, city in [("Анна", "Москва"), ("Олег", "Казань"), ("Ира", "Москва")]:
    groups[city].append(name)
print(dict(groups))
# {'Москва': ['Анна', 'Ира'], 'Казань': ['Олег']}

Дополнительные задачи

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

Задача 31: Частота слов в тексте

Напишите функцию, которая принимает строку и возвращает три самых частых слова с количеством повторов. Регистр и знаки препинания учитывать не нужно.

Решение:

import re
from collections import Counter

def top_words(text, n=3):
    words = re.findall(r"\w+", text.lower())
    return Counter(words).most_common(n)

print(top_words("Кот и пес. Кот спит, пес не спит, кот ест."))
# [('кот', 3), ('пес', 2), ('спит', 2)]

Задача 32: Средний балл по ученикам

Дан список словарей вида {"name": ..., "score": ...}, одно имя может встречаться несколько раз. Верните словарь, где каждому имени соответствует средний балл.

Решение:

def average_scores(records):
    scores = {}
    for r in records:
        scores.setdefault(r["name"], []).append(r["score"])
    return {name: sum(s) / len(s) for name, s in scores.items()}

data = [{"name": "Оля", "score": 5}, {"name": "Петя", "score": 3}, {"name": "Оля", "score": 4}]
print(average_scores(data))  # {'Оля': 4.5, 'Петя': 3.0}

Задача 33: Значение по пути во вложенном словаре

Напишите функцию, которая получает вложенный словарь и путь в виде строки "a.b.c" и возвращает значение по этому пути или None, если какого-то ключа нет.

Решение:

def get_by_path(data, path):
    current = data
    for key in path.split("."):
        if not isinstance(current, dict) or key not in current:
            return None
        current = current[key]
    return current

config = {"db": {"sqlite": {"file": "app.db"}}}
print(get_by_path(config, "db.sqlite.file"))  # app.db
print(get_by_path(config, "db.mysql.host"))   # None

Частые вопросы

Ответы на вопросы, которые чаще всего возникают при решении задач на словари.

Чем d[key] отличается от d.get(key)?

Обращение d[key] к отсутствующему ключу вызывает KeyError, а d.get(key) возвращает None или значение по умолчанию из второго аргумента. Квадратные скобки уместны, когда ключ точно есть, а его отсутствие означает ошибку в данных.

Какие объекты могут быть ключами словаря?

Только хешируемые: числа, строки, кортежи из неизменяемых элементов, frozenset. Список или другой словарь ключом быть не может, Python выдаст TypeError: unhashable type.

Сохраняет ли словарь порядок элементов?

Да, начиная с Python 3.7 словарь гарантированно хранит ключи в порядке добавления. Поэтому dict(sorted(d.items(), key=...)) из задачи 9 дает словарь в нужном порядке. Подробнее о вариантах сортировки в статье как отсортировать словарь.

Можно ли менять словарь во время перебора?

Добавлять и удалять ключи внутри цикла for key in d нельзя: будет RuntimeError. Поэтому в задаче 5 сначала собирается список ключей для удаления, а затем они удаляются отдельным циклом. Менять значения существующих ключей при переборе можно.

Где взять еще задачи на словари?

Продолжить практику можно в подборке задачи по словарям Python: там другие упражнения с решениями.