2016-02-09 29 views
0

我給出一個問題如下:的Python:使用字典打印因變量

B = C, D 
A = B 
C = E 

意思B依賴於變量C和d,而A是依賴於B,等等。變量E和D是獨立的。然後

'A' 的輸入應該返回:

E, C, D, B, A 

列出所有相關變量。爲了解決這個問題,我最開始定義字典來輕鬆地重複這種狀況:

letter = {'A' : ['B'], 'B' : ['C', 'D'], 'C' : ['E']} 

不過,我現在被困在我應該如何循環此,爲了有效地打印所有的孩子們。我相信這是錯誤的,但我認爲我可能會朝着正確的方向前進:

def problem(value): 
    letter = {'A' : ['B'], 'B' : ['C', 'D'], 'C' : ['E']} 
    for i in letter: 
     if i != value: 
      continue 
     if len(letter[i]) > 1: 
      for k in letter: 
       print("".join(letter[k]), k) 
     print("".join(letter[i]), i) 

請幫忙!

+0

這裏最好使用一棵樹。請參閱http://stackoverflow.com/questions/5287516/dependencies-tree-implementation – Selcuk

+0

使用有向圖不是更好嗎?如果您可以使用外部模塊,請查看networkX。如果從輸入中生成有向圖(這是您的問題所在),則可以從節點獲取所有後代:https://networkx.github.io/documentation/latest/reference/generated/networkx.algorithms.dag .descendants.html#networkx.algorithms.dag.descendants – DainDwarf

回答

0

經過一些快速的谷歌搜索後從http://code.activestate.com/recipes/576570-dependency-resolver/盜竊。

def dep(arg): 
    ''' 
     Dependency resolver 

    "arg" is a dependency dictionary in which 
    the values are the dependencies of their respective keys. 
    ''' 
    d=dict((k, set(arg[k])) for k in arg) 
    r=[] 
    while d: 
     # values not in keys (items without dep) 
     t=set(i for v in d.values() for i in v)-set(d.keys()) 
     # and keys without value (items without dep) 
     t.update(k for k, v in d.items() if not v) 
     # can be done right away 
     r.append(t) 
     # and cleaned up 
     d=dict(((k, v-t) for k, v in d.items() if v)) 
    return r 

if __name__=='__main__': 
    d=dict(
     a=('b','c'), 
     b=('c','d'), 
     e=(), 
     f=('c','e'), 
     g=('h','f'), 
     i=('f',) 
    ) 
    print dep(d) 
0

您在另一個列表中有一個列表。在另一個for循環中編寫一個嵌套for循環,然後通過測試邏輯運行它。對於外部列表迭代內部列表的每個部分,然後移動到外部列表的下一部分。