如何访问列表字典中的每个元素?

2024-09-28 20:57:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,它把列表作为一个值。我想分别访问中的键和值。我想单独访问列表中的元素。你知道吗

我试图用我得到的最终答案绘制一个决策树。为此,我必须分别访问每个元素。我最后的答案如下。有人能帮我分别访问每个值吗?你知道吗

tree = {
    "petal_width <= 0.8": [
        "Iris-setosa", 
        {
            "petal_width <= 1.75": [
                {
                    "petal_length <= 4.95": [
                        {
                            "petal_width <= 1.65": [
                                "Iris-versicolor", 
                                "Iris-virginica"
                            ]
                        }, 
                        {
                            "petal_width <= 1.55": [
                                "Iris-virginica", 
                                {
                                    "petal_length <= 5.45": [
                                        "Iris-versicolor", 
                                        "Iris-virginica"
                                    ]
                                }
                            ]
                        }
                    ]
                }, 
                {
                    "petal_length <= 4.85": [
                        {
                            "sepal_width <= 3.1": [
                                "Iris-virginica", 
                                "Iris-versicolor"
                            ]
                        }, 
                        "Iris-virginica"
                    ]
                }
            ]
        }
    ]
}

在访问元素之后,我想用以下格式绘制一个决策树。你知道吗

https://images.app.goo.gl/twNqgqq6tzMa2Ykj8


Tags: 答案决策树tree元素iris列表字典绘制
3条回答

在您的示例中,您有一个多层字典,其中:

键是字符串

值可以是:

  • 词典
  • 元组
  • 字符串

试试这段代码,使用单独的递归函数来解析元组和字典。我用print创建了一个函数my_action,但是你可以用任何你想要的替换它。如您所见,在函数中您还可以获得键。你知道吗


def parse_tuple(t):
    tuplen = len(t)
    for i in range(tuplen):
        v = t[i]
        if isinstance(v, tuple):
            parse_tuple(v)
        elif isinstance(v, dict):
            parse_dictionary(v)
        elif isinstance(v, str):
            my_action(v)
        else:
            print(v.dtype+" is not taken into account !")    

def parse_dictionary(d):
    for k in d:
        my_action(k)
        v = d[k]
        if isinstance(v, list):
            parse_dictionary(d[k])
        #elif isinstance(v, list):
         #   parse_list(v)
        elif isinstance(v, tuple):
            parse_tuple(v)    
        elif isinstance(v, str):
            my_action(v)

def my_action(x):
    print(x)

parse_dictionary(tree)  

根据您的输入,您将获得以下结果:

petal_width <= 0.8
Iris-setosa
petal_width <= 1.75
petal_length <= 4.95
petal_width <= 1.65
Iris-versicolor
Iris-virginica
petal_width <= 1.55
Iris-virginica
petal_length <= 5.45
Iris-versicolor
Iris-virginica
petal_length <= 4.85
sepal_width <= 3.1
Iris-virginica
Iris-versicolor
Iris-virginica

下面是一个示例,说明如何访问字典内列表中的元素以及字典的键。你知道吗

d = {
    'k1': [1, 2, 3, 4],
    'k2': [1,2],
    'k3': [1]
    }

for k in d:
  list_pos_k = d[k]
  print(f'key: {k}')
  print(f'elements in list: ')
  for el in list_pos_k:
    print(el)

你所拥有的是一本只有一个键和一个值的字典。键是petal_width <= 0.8,值是元组。你知道吗

for key, value in tree.items():
    print("Key: {}\nValue: {}".format(key,value))

要获取元组中的独立元素,可以调用name_of_the_tuple[0]name_of_the_tuple[1],或者如果您想要两者都调用:

for item in enumerate(name_of_the_tuple):
    print(item)

在你的情况下,应该是:

for key, value in tree.items():
    print("Key: {}\nFirst Value: {}\nSecond Value: {}".format(key,value[0],value[1]))

现在,丑陋的部分是你必须重新开始,因为value1也是一个字典,只有一个键和一个元组值。代码是这样的:

for key, value in tree.items():
    print("Key: {}\nFirst Value: {}\nSecond Value: {}".format(key,value[0],value[1]))
    for key1, value1 in value[1].items():
        print("Key: {}\nThird Value: {}\nFourth Value: {}".format(key1,value1[0],value1[1]))

……以此类推,直到你打开所有字典和元组。你知道吗

相关问题 更多 >