проблема с использованием функции и параметров для создания словаря

#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] тем, когда им просто нужны элементы из списка, поэтому, очевидно, мой мозг отказался печатать это здесь!