我有一个具有以下结构的字典:
KEY VALUES
v1 = {v2, v3}
v2 = {v1}
v3 = {v1, v5}
v4 = {v10}
v5 = {v3, v6}
键的值实际上是指向其他键的链接。通过使用我想要到达其他键的值直到结束。某些键未链接,因为您可以看到 v4 。我认为这类似于图遍历?
从v1
开始我想前往所有其他值:
v1 --> v2 --> v1
--> v3 --> v1
--> v5 --> v3
--> v6
v4 --> v10
def travel():
travel_dict = defaultdict(list)
travel_dict[v1].append(v2)
travel_dict[v1].append(v3)
travel_dict[v2].append(v1)
travel_dict[v3].append(v1)
travel_dict[v3].append(v5)
travel_dict[v5].append(v3)
travel_dict[v5].append(v6)
travel_dict[v6].append(v5)
travel_dict[v4].append(v10)
我可以使用什么递归函数来旅行字典?
答案 0 :(得分:3)
一个简单的解决方案是保持"访问"一组已知的节点:
def reach(travel_dict, x, visited=None):
if visited is None:
visited = set() # see note
visited.add(x)
for y in travel_dict.get(x, []):
if y not in visited:
yield y
for z in reach(travel_dict, y, visited):
yield z
用作
for y in reach(travel_dict, x):
print("you can go to", y)
注意:唯一棘手的部分是Python中的默认参数在创建函数对象时进行评估,而不是在调用函数时进行评估,因此使用可变默认值是一个问题,因为更改将在函数返回后保持有效。
答案 1 :(得分:0)
这是一种方法:在递归之前,递归地将每个元素简化为字符串形式。这应该是一个很好的起点
def traverse(obj):
'''
stringify individual elems of an object where object can be a nested structure
'''
if isinstance(obj, dict):
return dict((str(k),traverse(v)) for k,v in obj.items())
else:
return str(obj) # no container, just values (str, int, float)