簡體   English   中英

使用列表值的字典理解

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM