为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

沧海一幻觉 2022-04-27 14:07:04
我正在尝试创建一个每个键具有多个值的字典。例如: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']}
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您可以使用defaultdict并拆分车辆的名称以获得品牌(如果这些已标准化):


from collections import defaultdict


models_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字典中当前没有模型,将创建并使用一个空列表。


查看完整回答
反对 回复 2022-04-27
?
Helenr

TA贡献1780条经验 获得超3个赞

# 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 brand

for 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)


查看完整回答
反对 回复 2022-04-27
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

如果要保留代码的结构,请使用列表:


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_list

models_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 的答案将是最有效的答案。


查看完整回答
反对 回复 2022-04-27
  • 3 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信