← Назад к вопросам

Создание словаря из списков ключей и значений

3.0 Senior🔥 121 комментариев
#Тестирование

Условие

Создайте словарь из списков ключей и значений разной длины.

Правила:

  • Если ключу не соответствует значение — используйте None
  • Лишние значения игнорируйте

Пример

keys = ["a", "b", "c", "d"] values = [1, 2]

Результат: {"a": 1, "b": 2, "c": None, "d": None}

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение: Создание Словаря из Списков Разной Длины

Эта задача требует создать словарь, где каждому ключу соответствует значение, но списки могут быть разной длины. Если значений не хватает, используется None.

Подход 1: zip_longest (Рекомендуемый)

Используем функцию itertools.zip_longest с параметром fillvalue=None:

from itertools import zip_longest

def create_dict(keys: list, values: list) -> dict:
    return dict(zip_longest(keys, values, fillvalue=None))

keys = ["a", "b", "c", "d"]
values = [1, 2]
result = create_dict(keys, values)
print(result)

Преимущества:

  • Самый питонический способ
  • Лаконичный и читаемый
  • Встроенная функция работает оптимально
  • Обрабатывает оба случая: когда значений меньше или больше

Подход 2: Цикл с enumerate

Манипуляция через индексы с проверкой границ:

def create_dict(keys: list, values: list) -> dict:
    result = {}
    for i, key in enumerate(keys):
        result[key] = values[i] if i < len(values) else None
    return result

Характеристики:

  • Явный контроль логики
  • Понятен даже новичку
  • Может быть медленнее на больших данных

Подход 3: Dict Comprehension

Используем list comprehension с условием:

def create_dict(keys: list, values: list) -> dict:
    return {key: (values[i] if i < len(values) else None) 
            for i, key in enumerate(keys)}

Характеристики:

  • Функциональный стиль
  • Однострочное решение
  • Хороший баланс производительности и читаемости

Примеры

from itertools import zip_longest

def create_dict(keys: list, values: list) -> dict:
    return dict(zip_longest(keys, values, fillvalue=None))

keys = ["a", "b", "c", "d"]
values = [1, 2]
print(create_dict(keys, values))

print(create_dict(["x", "y"], [10, 20, 30]))
print(create_dict([], [1, 2, 3]))
print(create_dict(["a"], []))
print(create_dict(["p", "q", "r"], [100]))

Рекомендация

Используй zip_longest — это стандартный питонический способ:

  • Явно показывает намерение (заполнить недостающие значения)
  • Оптимален по производительности
  • Легче читается и понимается
  • Меньше кода, меньше ошибок

Это демонстрирует знание стандартной библиотеки Python и умение писать идиоматичный код.

Создание словаря из списков ключей и значений | PrepBro