如何从两个单独的列表中创建一个每个键具有多个值的字典?

我正在尝试创建一个每个键具有多个值的字典。例如:


top_10 = ['Volkswagen_Golf_1.4', 'BMW_316i', 'Ford_Fiesta', 'BMW_318i', 'Volkswagen_Polo', 'BMW_320i', 'Opel_Corsa', 'Renault_Twingo', 'Volkswagen_Golf', 'Opel_Corsa_1.2_16V']


common_brands = ['volkswagen', 'bmw', 'opel', 'mercedes_benz', 'audi', 'ford']

我想创建一个看起来像这样的字典:


{'volkswagen': ['Volkswagen_Golf_1.4', 'Volkswagen_Polo', 'Volkswagen_Golf'], 'bmw': ['BMW_316i', 'BMW_318i', 'BMW_320i'], 'opel': ['Opel_Corsa', 'Opel_Corsa_1.2_16V'],'ford': ['Ford_Fiesta'], 'Renault': ['Reanault_Twingo']}

使用我尝试过的代码,每个品牌只能获得一个型号,并且找不到添加不在 common_brands 列表中的品牌的方法。


models_by_brand = {}


for brand in common_brands:

    for model in top_10:

        if brand in model.lower():

            models_by_brand[brand] = [model]


models_by_brand

输出:


{'bmw': ['BMW_320i'],

 'ford': ['Ford_Fiesta'],

 'opel': ['Opel_Corsa_1.2_16V'],

 'volkswagen': ['Volkswagen_Golf']}


沧海一幻觉
浏览 117回答 3
3回答

慕侠2389804

您可以使用defaultdict并拆分车辆的名称以获得品牌(如果这些已标准化):from collections import defaultdictmodels_by_brand = defaultdict(list)for model in top_10:    brand = model.lower().split('_')[0]    models_by_brand[brand].append(model)通过使用defaultdict,您可以编写models_by_brand[brand].append(model),如果brand字典中当前没有模型,将创建并使用一个空列表。

Helenr

# The following code should work just fine.top_10 = ['Volkswagen_Golf_1.4', 'BMW_316i', 'Ford_Fiesta', 'BMW_318i', 'Volkswagen_Polo', 'BMW_320i', 'Opel_Corsa',          'Renault_Twingo', 'Volkswagen_Golf', 'Opel_Corsa_1.2_16V']common_brands = ['volkswagen', 'bmw', 'opel', 'mercedes_benz', 'audi', 'ford']result = {}cars = []# For each car brandfor k in common_brands:    # For each car model    for c in top_10:        # if car brand present in car model name append it to list        if k.lower() in c.lower():            cars.append(c)    # if cars list is not empty copy it to the dictionary with key k    if len(cars) > 0:        result[k] = cars.copy()    # Reset cars list for next iteration    cars.clear()print(result)

慕无忌1623718

如果要保留代码的结构,请使用列表:models_by_brand = {}for brand in common_brands:    model_list=[]    for model in top_10:        if brand in model.lower():            model_list.append(model)    models_by_brand[brand] = model_listmodels_by_brand = {k:v for k,v in models_by_brand.items() if v!=[]}输出:{'volkswagen': ['Volkswagen_Golf_1.4', 'Volkswagen_Polo', 'Volkswagen_Golf'], 'bmw': ['BMW_316i', 'BMW_318i', 'BMW_320i'], 'opel': ['Opel_Corsa', 'Opel_Corsa_1.2_16V'], 'ford': ['Ford_Fiesta']}不过,@Holt 的答案将是最有效的答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python