我有这样的字典:
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
),那么b
,c
,d
(因为a
取决于b
,c
,d
),但即使b
1}}取决于c
和d
,我不会将它们添加到recompiling_list
,因为我已经在a
时添加了它们。
我试图递归,但我总是在无限循环中结束。
我有没有办法像上面描述的那样创建一个列表?订单真的不重要。
答案 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)
当您的依赖项形成一个圆圈时,您会遇到一个无限循环。 您可以使用递归算法,只需在添加所有存在的文件时停止。 为避免重复元素,请使用集合。集合只允许每个元素一次。 您还可以在计算后轻松将集合转换为列表