2016-08-26 4 views
0

나는이 같은 사전이 사전의 모든 두 값과 키를 가져 오기 :한 번만

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

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

것은이 사전 종속성 목록 등의 방법으로하자를 내가 파일 뭔가를 수정하는 경우 그 그 열쇠, 내 .values ​​()에있는 모든 파일을 다시 컴파일해야합니다.

그래서 예에서 : 나는 파일 e에 뭔가를 수정하면 다음 (ea에 의존하기 때문에) 내가 파일 a을 다시 컴파일해야합니다 b, c, d (ab, c, d에 의존하기 때문에) bcd에 달려 있지만 a에 있었을 때 이미 추가했기 때문에 recompiling_list에 추가하지 않겠습니다.

저는 재귀 적으로 시도하지만 항상 끝내지는 않습니다.

위에서 설명한 것처럼 목록을 만드는 방법이 있습니까? 순서는 중요하지 않습니다.

답변

1

후 목록에 세트를 변환 할 수 있습니다 것은이가 (테스트하지) 시도 : 최적화 (O(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) 

사용. 실제로 목록 또는 다른 콜렉션 유형을 사용할 수 있습니다.

+0

글쎄, 저주받을. 그것은 일했다 : | 고마워. 고마워. – SnuKies

0

종속성이 원을 형성하면 무한 루프가 발생합니다. 재귀 알고리즘을 사용하면 존재하는 모든 파일을 추가 할 때 중지됩니다. 중복 된 요소를 피하려면 세트를 사용하십시오. 세트는 각 요소가 한 번만 허용됩니다. 당신은 쉽게 계산

+0

세트에 대해 알지 못했습니다. 나는 지금 그들을 조사 할 것이다. – SnuKies