#python #function #dictionary
Вопрос:
Мне бы не помешала помощь в решении этой проблемы. Мне нужно создать функцию, которая создает словарь с 4 параметрами и ключом, которые увеличивают каждую запись этого словаря. До сих пор у меня есть это:
def create_db(temp, rain, humidity, wind): weather = {} n = 0 for i in (temp, rain, humidity, wind): n = n 1 weather[n] = (temp, rain, humidity, wind) return weather temp = [1, 5, 3] rain = [0, 30, 100] humidity = [30, 50, 65] wind = [3, 5, 7] weather = create_db(temp, rain, humidity, wind) print(weather)
Проблема с этим кодом заключается в том, что он печатает:
{1: (1, 0, 30, 3), 2: (1, 0, 30, 3), 3: (1, 0, 30, 3), 4: (1, 0, 30, 3)}
Это только ставит первое значение для списка во всех для них. Что я делаю не так?
Ответ №1:
Я отмечу, что, хотя ваш метод не является «неправильным» (после применения исправления), более питонический способ сделать это полностью избавляет от необходимости использовать индексы:
def create_db(temp, rain, humidity, wind): return {n: vals for n, vals in enumerate(zip(temp, rain, humidity, wind), 1)}
или еще более упрощенная версия:
def create_db(temp, rain, humidity, wind): return dict(enumerate(zip(temp, rain, humidity, wind), 1))
Комментарии:
1. Вам даже не нужно понимание диктанта;
dict(enumerate(...))
этого достаточно.2. @chepner Да, спасибо! Добавлен альтернативный вариант, но оставил оригинал, чтобы показать некоторые гайки и болты.
Ответ №2:
температура, дождь и т. Д.-Это списки. Вам нужно ссылаться на элемент в каждом списке, т. е.
weather[n] = (temp[n], rain[n], humidity[n], wind[n])
Вы также не имеете в виду for i in (temp, rain, humidity, wind)
— это будет 4, потому что там есть 4 переменные списка. Вместо этого используйте длину одного из списков, например:
for n in range(len(temp)):
Таким образом, вам также не нужно увеличивать n
.
Комментарии:
1.
for n in range(len(temp))
2. Спасибо — исправили это. Я обычно провожу большую часть дней, говоря людям «не использовать
for i in range(len(x))
» в сочетании сx[i]
тем, когда им просто нужны элементы из списка, поэтому, очевидно, мой мозг отказался печатать это здесь!