我有一本字典,其中包含列表作为值之一。我想分别访问键和值。我也想单独访问列表的元素。
我正在尝试使用最终的答案来绘制决策树。为此,我必须分别访问每个元素。我给出的最终答案如下。有人可以帮助我如何分别访问每个值吗?
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"
]
}
]
}
]
}
访问元素后,我想以以下格式绘制决策树。
答案 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]))
...等等,直到您解压所有字典和元组为止。