problem
获得所有参数组合
例如有一个url支持的key, value参数你有一个列表,你想生成所有的参数对儿
# -*- coding: utf-8 -*-
'''
d = {
'd1': [1, 2, 3]
'd2': ['a', 'b']
...
'dn': ['w1', 'w2', 'w3', 'w4']
}
-->
[
{
'd1': 1, 'd2': 'a', ..., 'dn': 'w1',
},
{
'd1': 1, 'd2': 'a', ..., 'dn': 'w2',
}
{
'd1': 1, 'd2': 'a', ..., 'dn': 'w3',
}
...
{
'd1': 1, 'd2': 'b', ..., 'dn': 'w1',
},
{
'd1': 1, 'd2': 'b', ..., 'dn': 'w2',
}
{
'd1': 1, 'd2': 'b', ..., 'dn': 'w3',
}
...
{
'd1': 2, 'd2': 'a', ..., 'dn': 'w1',
},
{
'd1': 2, 'd2': 'a', ..., 'dn': 'w2',
}
{
'd1': 2, 'd2': 'a', ..., 'dn': 'w3',
}
]
'''
from itertools import product
def genarate_value(prefix, n):
return ['{}{}'.format(prefix, i) for i in xrange(n)]
d = {
'd1': genarate_value('a', 4),
'd2': genarate_value('b', 3),
'd3': genarate_value('c', 6),
}
def _izip(key, values):
'''
key: [value1, value2, ...]
-->
(key, value1), (key, value2)
'''
return [(key, value) for value in values]
def alot_params(params):
return product(*(_izip(key, values) for key, values in params.iteritems()))
result = [dict(each) for each in alot_params(d)]
print result
Last updated