-1

私は次の辞書を持っています:

test = OrderedDict({
        "one":1,
        "two":2,
        "three":3
})

そして、私は次の結果を得たいと思っています:

{'three':3, 'two':2, 'one':1}
{'three':3, 'one':1, 'two':2}
{'two':2, 'three', 'one':1}
{'two':2, 'one':1, 'three':3}
{'one':1, 'three':3, 'two':2}
{'one':1, 'two':2, 'three':3}

これらは、指定されたテスト辞書の順列を使用して生成できるすべての辞書です。

今のところ、次を使用して可能な順列のタプルのみを取得できます。

for perm in itertools.permutations(test):
    print(perm)

出力します:

('three', 'two', 'one')
('three', 'one', 'two')
('two', 'three', 'one')
('two', 'one', 'three')
('one', 'three', 'two')
('one', 'two', 'three')

itertools を使用して、タプルの代わりにキー/値を持つ辞書を取得するにはどうすればよいですか?

編集: テストを OrderedDict に変更しました

4

1 に答える 1

2

辞書には順序がありませんが、順列をタプルとして取得し、それらをOrderedDict次のように変換できます。

>>> import itertools
>>> import collections
>>> for item in itertools.permutations(test.items()):
...     print collections.OrderedDict(item)
...
OrderedDict([('three', 3), ('two', 2), ('one', 1)])
OrderedDict([('three', 3), ('one', 1), ('two', 2)])
OrderedDict([('two', 2), ('three', 3), ('one', 1)])
OrderedDict([('two', 2), ('one', 1), ('three', 3)])
OrderedDict([('one', 1), ('three', 3), ('two', 2)])
OrderedDict([('one', 1), ('two', 2), ('three', 3)])
于 2013-11-06T18:06:33.017 に答える