Python:使用字典打印因变量

时间:2016-02-09 07:09:17

标签: python dictionary

我有一个问题如下:

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)

请帮忙!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您有另一个列表中的列表。在另一个for循环内写一个嵌套的for循环,然后通过你的测试逻辑运行它。对于外部列表,迭代内部列表的每个部分,然后移动到外部列表的下一部分。