如何创建多维字典

问题描述 投票:0回答:1

如何制作具有多个键和值的多维词典,以及如何打印其键和值?

从此格式:

main_dictionary= { Mainkey: {keyA: value
                             keyB: value
                             keyC: value
                 }}

我尝试这样做,但是它给制造商带来了错误。这是我的代码

car_dict[manufacturer] [type]= [( sedan, hatchback, sports)]

这是我的错误:

File "E:/Programming Study/testupdate.py", line 19, in campany
car_dict[manufacturer] [type]= [( sedan, hatchback, sports)]
KeyError: 'Nissan'

我的打印代码是:

            for manufacuted_by, type,sedan,hatchback, sports in cabuyao_dict[bgy]:
                print("Manufacturer Name:", manufacuted_by)
                print('-' * 120)
                print("Car type:", type)
                print("Sedan:", sedan)
                print("Hatchback:", hatchback)
                print("Sports:", sports)

谢谢!我是Python新手。

python-3.x dictionary multidimensional-array printing key
1个回答
0
投票

[我认为您对dict的工作方式以及如何“回调”其中的值有些误解。

让我们举两个例子说明如何创建数据结构:

car_dict = {}
car_dict["Nissan"] = {"types": ["sedan", "hatchback", "sports"]}
print(car_dict) #  Output: {'Nissan': {'types': ['sedan', 'hatchback', 'sports']}}

from collections import defaultdict
car_dict2 = defaultdict(dict)
car_dict2["Nissan"]["types"] = ["sedan", "hatchback", "sports"]
print(car_dict2) # Output: defaultdict(<class 'dict'>, {'Nissan': {'types': ['sedan', 'hatchback', 'sports']}})

在以上两个示例中,我首先创建一个字典,然后在添加要包含的值之后在该行上。在第一个示例中,我给car_dictkey "Nissan"并将其值设置为包含一些值的新字典。

[在第二个示例中,我使用defaultdict(dict),其基本逻辑是“如果没有为value赋予key,则使用工厂(dict)为其创建一个value。] >

您能看到两种不同方法内部如何初始化值的区别吗?

[在代码中调用car_dict[manufacturer][type]时,尚未启动car_dict["Nissan"] = value,因此,当您尝试检索它时,car_dict返回了KeyError

关于打印值,您可以执行以下操作:

for key in car_dict:
    manufacturer = key
    car_types = car_dict[key]["types"]
    print(f"The manufacturer '{manufacturer}' has the following types:")
    for t in car_types:
        print(t)

输出:

The manufacturer 'Nissan' has the following types:
sedan
hatchback
sports

循环遍历dict时,您循环遍历only

默认情况下包含在其中的键。这意味着我们必须在循环本身内部检索key的值,才能正确print的值。

也作为旁注:您应该避免使用诸如type之类的内置名称作为变量名称,因为那样您会覆盖该函数的名称空间,将来在进行比较时可能会遇到一些问题类型的变量。]​​>

© www.soinside.com 2019 - 2024. All rights reserved.