[英]dictionary comprehension using list values
我想使用字典/列表理解來創建字典多個列表。
這是我的 3 個列表:
city_list = ['new york','boston']
times = ['2021-01-01 19:00:00','2021-01-01 20:00:00']
weather_parameters = ['forecastTimeUtc', 'airtemperature', 'condition']
我想創建一個看起來像這樣的字典:
{'new york':[{'forecastTimeUtc': '2021-01-01 20:00:00', 'airTemperature': 0, 'conditionCode': 0}, {'forecastTimeUtc': '2021-01-01 21:00:00', 'airTemperature': 0, 'conditionCode': 0}],
'boston': [{'forecastTimeUtc': '2021-01-01 20:00:00', 'airTemperature': 0, 'conditionCode': 0}, {'forecastTimeUtc': '2021-01-01 21:00:00', 'airTemperature': 0, 'conditionCode': 0}]}
挑戰是根據“forecastTimeUtc”內的值數量來乘以城市之后的列表。
默認情況下,鍵“airTemperature”和“conditionCode”的其他值應保持為 0。
通常,我們會在列表推導式簡潔且使您的代碼優雅時使用它們。 我擔心想要一個字典理解會讓你的代碼的讀者感到困惑,我建議構建多個嵌套的 for 循環。
盡管如此,這是一個滿足您需求的字典壓縮:
{city:[{weather_parameter: (time if weather_parameter == 'forecastTimeUtc' else 0) for weather_parameter in weather_parameters} for time in times] for city in city_list}
分步過程
沒有任何列表理解,代碼非常繁重
weather_per_city = {}
for city in city_list:
params_list = []
for time in times:
param_dict = {}
for weather_parameter in weather_parameters:
if weather_parameter == 'forecastTimeUtc':
param_dict[weather_parameter] = time
else:
param_dict[weather_parameter] = 0
params_list.append(param_dict)
weather_per_city[city] = params_list
仍然沒有列表理解,但使用三元運算符開始簡化
weather_per_city = {}
for city in city_list:
params_list = []
for time in times:
param_dict = {}
for weather_parameter in weather_parameters:
param_dict[weather_parameter] = time if weather_parameter == 'forecastTimeUtc' else 0
params_list.append(param_dict)
weather_per_city[city] = params_list
第一個字典理解:
weather_per_city = {}
for city in city_list:
params_list = []
for time in times:
param_dict = {weather_parameter:(time if weather_parameter == 'forecastTimeUtc' else 0) for weather_parameter in weather_parameters}
params_list.append(param_dict)
weather_per_city[city] = params_list
並帶有第二個理解(字典+列表):
weather_per_city = {}
for city in city_list:
params_list = [{weather_parameter:(time if weather_parameter == 'forecastTimeUtc' else 0) for weather_parameter in weather_parameters} for time in times]
weather_per_city[city] = params_list
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.