Недавно я работал со словарями, и мне сказали составить словари из двух таких списков:
zipped = {key: value for key, value in zip(drinks, caffeine)}
Позже я забыл, как это сделать, и нашел другой способ, который мне показался более простым:
zipped = dict(zip(drinks, caffeine))
Есть ли что-то хуже в использовании второго примера вместо первого?
Разница действительно в производительности и читаемости. Второй пример может быть быстрее первого, но первый легче понять, поэтому другому разработчику, который увидит ваш код, не придется глубоко копаться, чтобы понять, что вы хотите сделать.
Для прототипирования лучше использовать первый вариант, поскольку его можно легко изменить. Второй AFAIK более питонический.
Не связано напрямую, но я хотел отметить, что если drinks
и caffeine
не имеют одинакового количества элементов, ни один из двух методов не выдаст никакого предупреждения или ошибки. Возможно, стоит сделать zip(drinks, caffeine, strict=True)
Первый способ более гибкий: подумайте, нужно ли вам добавить условие или преобразовать ключ/значение с помощью вызова какой-либо функции. Он также позволяет избежать поиска имени dict
.
Первый вариант немного понятнее, второй, по моему опыту, немного быстрее (в основном я бы использовал второй).
Нет, dict(whatever)
всегда следует отдавать предпочтение перед {k:v for k,v in whatever}
, так же, как list(whatever)
следует отдавать предпочтение перед [x for x in whatever]
.
@Тимус, второй определенно чище
@JohnCarter, второе так же легко понять
Словарь/список — отличные гибкие инструменты. Вас учили этому, чтобы решение было более гибким и соответствовало текущим практикам кодирования. Как говорится, это «проблема навыков». В этом нет ничего плохого. Всегда читайте рекомендации компании по кодированию, где это возможно.
Технически, ОП использует словарное понимание.
Вторая версия действительно является более элегантным способом сделать то же самое. Действуй.