【发布时间】:2016-10-04 04:11:37
【问题描述】:
我有一个 Python 对象,其结构如下:
tree = {
"a": {
"aa": {
"aaa": {},
"aab": {},
"aac": {}
},
"ab": {
"aba": {},
"abb": {}
}
},
"b": {
"ba": {}
},
"c": {}
}
还有一组字符串列表,例如:
arr_1 = ["a", "ab"]
arr_2 = ["b", "ab"]
arr_3 = ["a", "ab", "aba"]
每个列表都定义了树中键的路径,我想确定该列表是否描述了通过树的有效路径。
目前我可以像这样逐案回答:
tree[arr_1[0]][arr_1[1]] # Returns correct object
tree[arr_2[0]][arr_2[1]] # Returns error
tree[arr_3[0]][arr_3[1]][arr_3[2]] # Returns correct object
虽然这不能满足我的要求。我更喜欢一个函数,它可以在树中搜索任何给定列表中的键。
以下函数几乎是我想要的,但它不能处理不同长度的列表。
def is_valid(tree, arr):
obj = tree[arr[0]][arr[1]]
if len(obj) > 0:
return(obj)
else:
return("No obj")
目前这个函数输出
is_valid(tree, arr_1) # Returns the correct result
is_valid(tree, arr_2) # Returns an error
is_valid(tree, arr_3) # Returns the same result as arr_1, which is incorrect
谁能帮我扩展这个函数以动态响应arr 参数的长度?
谢谢!
【问题讨论】:
-
首先,您的“字典集”实际上是“str 列表”。第二次尝试使用
for key in arr:循环遍历is_valid中的键。第三,不确定这是硬件还是用例,但如果可以,您可以尝试创建一个实际的树并进行搜索。
标签: python arrays object dictionary