字典中键值对的最长循环

时间:2016-12-09 09:39:43

标签: dictionary python-3.5

我有一个关于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)

我不知道如何解决这个问题,尽管我确切知道自己想要做什么。希望得到一些帮助。

1 个答案:

答案 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)