使用Python中的生成器循环遍历字典

时间:2016-05-07 00:37:20

标签: python

我试图在字典上循环找到所有可能的组合,更具体一点,如果我输入{'a':[1,2],'b':3},我想得到{' a::1,'b':3}和{'a':2,'b':3}。

我试着编写一个可以递归工作的生成器:

def loop_dic(dic, head={}):

    if len(dic) == 0:
        yield head

    k = dic.keys()[0]
    vals = dic[k]
    dic.pop(k)
    if not hasattr(vals, '__iter__'):
        vals = [vals]

    for v in vals:
        _head = head.copy()
        _head.update({k:v})
        loop_dic(dic, _head)

但它不起作用,因为它在第一次递归调用时得到GeneratorExit:None。 怎么做?

1 个答案:

答案 0 :(得分:2)

你所做的只是致电loop_dic();你没有做任何事情。在Python 3中,您可以这样做:

        yield from loop_dic(dic, _head)

在Python 2中,你需要一个循环:

        for item in loop_dic(dic, _head):
            yield item