[英]Variable number of loops in function (python)
这是我想做的事情的例子:
d1 = {'a':1,'b':2,'c':3}
d2 = {'aa':11,'bb':22,'cc':33}
d3 = {'aaa':111,'bbb':222,'ccc':333}
def nLoop(*args):
n = len(args)
if n == 1:
for k0,v0 in args[0].iteritems():
print k0, v0
if n == 2:
for k0,v0 in args[0].iteritems():
for k1,v1 in args[1].iteritems():
print k0, v0, k1, v1
if n == 3:
for k0,v0 in args[0].iteritems():
for k1,v1 in args[1].iteritems():
for k2,v2 in args[2].iteritems():
print k0, v0, k1, v1, k2, v2
nLoop(d1,d2,d3)
我的问题是:如果没有if条件,有没有办法做到这一点? 也许使用装饰器?
你可以将你的变量参数列表传递给itertools.product
(使用生成器comprenehsion将dicts转换为它们的项目),然后打印展平的结果(因为product
返回元组的元组):
from __future__ import print_function
import itertools
d1 = {'a':1,'b':2,'c':3}
d2 = {'aa':11,'bb':22,'cc':33}
d3 = {'aaa':111,'bbb':222,'ccc':333}
def nLoop(*args):
for t in itertools.product(*(a.items() for a in args)):
print(*(x for a in t for x in a))
nLoop(d1,d2,d3)
这个新的nLoop
函数的输出与你的相同(如果不考虑顺序,因为字典顺序可能在运行之间改变)
请注意,这是一个符合Python 3的解决方案,但也适用于Python 2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.