我试图在字典上循环找到所有可能的组合,更具体一点,如果我输入{'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。 怎么做?
答案 0 :(得分:2)
你所做的只是致电loop_dic()
;你没有做任何事情。在Python 3中,您可以这样做:
yield from loop_dic(dic, _head)
在Python 2中,你需要一个循环:
for item in loop_dic(dic, _head):
yield item