← Назад к вопросам
Создание словаря из списков ключей и значений
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 и умение писать идиоматичный код.