1

友達、基本的に、私は口述を取りたいです:

fruit_dict = {'oranges':['big','small'],'apples':['green','yellow','red']}

そして、異なるキーのすべての値の間で可能なすべての順列を使用して、次の辞書のリストを取得します。

output_list = 
[
{'oranges':'big','apples':'green'},
{'oranges':'big','apples':'yellow'},
{'oranges':'big','apples':'red'},
{'oranges':'small','apples':'green'},
{'oranges':'small','apples':'yellow'},
{'oranges':'small','apples':'red'}
]

どうやってするの?どうもありがとう!

4

2 に答える 2

8

あなたが探しているのは順列ではなく、デカルト積です。ネストされたループのように考えてください。

from itertools import product

fruit_dict = {'oranges':['big','small'],'apples':['green','yellow','red']}    

keys, values = zip(*fruit_dict.items())
print [dict(zip(keys, value_list)) for value_list in product(*values)]

次に、既存のキーと製品の各アイテムを使用して新しい辞書を作成する必要があります。

于 2012-12-27T03:04:22.350 に答える
0

使用itertools.product()

In [94]: dic = {'oranges':['big','small'],'apples':['green','yellow','red']}

In [95]: sort_values=[x[1] for x in sorted(dic.items())]  #sorted values based on keys

In [96]: [dict(zip(sorted(dic.keys()),x)) for x in product(*sort_values)]
Out[96]: 
[{'apples': 'green', 'oranges': 'big'},
 {'apples': 'green', 'oranges': 'small'},
 {'apples': 'yellow', 'oranges': 'big'},
 {'apples': 'yellow', 'oranges': 'small'},
 {'apples': 'red', 'oranges': 'big'},
 {'apples': 'red', 'oranges': 'small'}]
于 2012-12-27T03:15:31.063 に答える