如果我们可以假设你知道字典键事前,一个办法做到这一点是 -
from itertools import product
result = {'x':[],'y':[],'z':[]}
for a,b,c in product(data['x'],data['y'],data['z']): #data is the original dictionary
result['x'].append(a)
result['y'].append(b)
result['z'].append(c)
上述发送列表(字典中的值)设置为itertools.product
,然后将itertools.product
产生的每个组合/产品都添加到结果字典的列表中。
演示 -
>>> data = {"x":['1','2','3'],
... "y":['4','5'],
... "z":['puddi']}
>>>
>>> from itertools import product
>>> result = {'x':[],'y':[],'z':[]}
>>> for a,b,c in product(data['x'],data['y'],data['z']):
... result['x'].append(a)
... result['y'].append(b)
... result['z'].append(c)
...
>>> pprint.pprint(result)
{'x': ['1', '1', '2', '2', '3', '3'],
'y': ['4', '5', '4', '5', '4', '5'],
'z': ['puddi', 'puddi', 'puddi', 'puddi', 'puddi', 'puddi']}
一个通用的解决方案 -
keys = list(data.keys()) #Or the list of keys you want Ex. - keys = ['x','y']
result = {k:[] for k in keys}
import operator
for item in product(*operator.itemgetter(*keys)(data)):
for i, k in enumerate(keys):
result[k].append(item[i])
演示 -
>>> keys = list(data.keys())
>>> result = {k:[] for k in keys}
>>> import operator
>>> for item in product(*operator.itemgetter(*keys)(data)):
... for i, k in enumerate(keys):
... result[k].append(item[i])
...
>>> pprint.pprint(result)
{'x': ['1', '2', '3', '1', '2', '3'],
'y': ['4', '4', '4', '5', '5', '5'],
'z': ['puddi', 'puddi', 'puddi', 'puddi', 'puddi', 'puddi']}
非常感谢解决方案的人,他们真的很有帮助。 但我意识到我在我的问题上犯了一个错误; itertools。产品将给我详尽的/ cartessian组合,而我想要所有对/成对组合(我的示例数据的形状产生相同数量的穷举/ cartessian组合和成对我感到困惑)。 所以我现在所做的是使用OrderedDict对数值进行排序,并尝试使用前两行执行一个产品,然后使用其他行中的交替数值填充剩余空间 – TesenkaNoMai