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

时间:2019-09-06 18:03:20

标签: python python-3.x python-2.7

我有一本字典,其中包含列表作为值之一。我想分别访问键和值。我也想单独访问列表的元素。

我正在尝试使用最终的答案来绘制决策树。为此,我必须分别访问每个元素。我给出的最终答案如下。有人可以帮助我如何分别访问每个值吗?

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

3 个答案:

答案 0 :(得分:1)

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

是字符串

可以是:

  • 字典
  • 元组
  • 字符串

尝试使用以下代码,该代码具有用于解析元组和字典的单独的递归函数。我使用my_action创建了一个函数print,但是您可以将其替换为所需的任何内容。如您所见,在功能中您还可以获得键。


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

答案 1 :(得分:0)

这是一个示例,说明如何从字典中的列表以及字典的键访问元素。

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)

答案 2 :(得分:0)

您所拥有的是一本字典,其中有一个键和一个值。密钥是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]))

...等等,直到您解压所有字典和元组为止。