我有一个关于Python 3的问题,我无法解决这个问题。 假设我得到了以下词典。
{'Noah': 'Liam', 'Ethan': 'Peter', 'Liam': 'Olivia', 'Emma': 'Ethan', 'Peter': 'Emma', 'Olivia': 'Noah'}
我需要在这本词典中找到最长的键值对循环。
在伪代码中,这将是
for key in dictionary:
find value in dictionary, make this key
continue process untill start key has been detected
在这个例子中,最长的周期是:
诺亚 - >利亚姆 - >奥利维亚 - >诺亚(长度为3)
我不知道如何解决这个问题,尽管我确切知道自己想要做什么。希望得到一些帮助。
答案 0 :(得分:0)
问题的关键字是递归...或谷歌"链接列表"。在一张纸上画出你想要做的事情并单独考虑每一步......用少量的数据就可以了。
肯定不是最漂亮的解决方案,但它确实有效。你明白了。
import copy
people = {'Noah': 'Liam', 'Ethan': 'Peter', 'Liam': 'Olivia', 'Emma': 'Ethan', 'Peter': 'Emma', 'Olivia': 'Noah'}
def walk_the_links(person, subtree, counter):
print(person)
if person in subtree:
counter += 1
next_person = subtree[person]
subtree.pop(person)
counter = walk_the_links(next_person, subtree, counter)
return counter
for person in people:
subtree = copy.deepcopy(people)
counter = 0
length_tree = walk_the_links(person, subtree, counter)
print(length_tree)