时间:2016-08-26 06:56:00

标签: python-2.7 dictionary

我有这样的字典:

my_dictionary = { a:['b','c','d']
                  b:['c','d']
                  c:[]
                  e:['a']
                 }

where a,b,c,d,e are files

让这个字典成为依赖关系的列表,这样如果我修改了作为密钥的文件,我将不得不重新编译我的.values()中的所有文件。

因此,在示例中:如果我修改了文件e中的某些内容,我将不得不重新编译文件a(因为e取决于a),那么bcd(因为a取决于bcd),但即使b 1}}取决于cd,我不会将它们添加到recompiling_list,因为我已经在a时添加了它们。

我试图递归,但我总是在无限循环中结束。

我有没有办法像上面描述的那样创建一个列表?订单真的不重要。

2 个答案:

答案 0 :(得分:1)

试试这个(未经测试):

def finddep(depdict, fil, depset):
    if fil in depset:
        return
    depset.add(fil)
    for dep in depdict[fil]:
        filddep(depdict, dep, depset)

depset = set()
finddep(my_dictionary, 'e', depset)

使用set进行优化(O(1)成员资格测试)。您实际上可以使用列表或其他集合类型。

答案 1 :(得分:0)

当您的依赖项形成一个圆圈时,您会遇到一个无限循环。 您可以使用递归算法,只需在添加所有存在的文件时停止。 为避免重复元素,请使用集合。集合只允许每个元素一次。 您还可以在计算后轻松将集合转换为列表