Reputation: 39
How to get all combinations (listed) from a given dictionary, in python ?
My input:
my_dict = {"location_01":"Item_01", "location_02":"Item_02", "location_03":"Item_03"}
Desidered output:
[{"location_01": "Item_01", "location_02": "Item_02", "location_03": "Item_03"},
{"location_01": "Item_02", "location_02": "Item_01", "location_03": "Item_03"},
{"location_01": "Item_03", "location_02": "Item_02", "location_03": "Item_01"},
{"location_02": "Item_01", "location_01": "Item_02", "location_03": "Item_03"},
{"location_02": "Item_02", "location_01": "Item_01", "location_03": "Item_03"},
{"location_02": "Item_03", "location_01": "Item_02", "location_03": "Item_01"},
{"location_03": "Item_01", "location_02": "Item_02", "location_01": "Item_03"},
{"location_03": "Item_02", "location_02": "Item_01", "location_01": "Item_02"},
{"location_03": "Item_03", "location_02": "Item_02", "location_01": "Item_01"}]
Upvotes: 0
Views: 99
Reputation: 23166
You're right in thinking of itertools
but you want permutations and not combinations:
from itertools import permutations
lst = [{k: my_dict[k] for k in l} for l in permutations(my_dict)]
>>> lst
[{'location_01': 'Item_01', 'location_02': 'Item_02', 'location_03': 'Item_03'},
{'location_01': 'Item_01', 'location_03': 'Item_03', 'location_02': 'Item_02'},
{'location_02': 'Item_02', 'location_01': 'Item_01', 'location_03': 'Item_03'},
{'location_02': 'Item_02', 'location_03': 'Item_03', 'location_01': 'Item_01'},
{'location_03': 'Item_03', 'location_01': 'Item_01', 'location_02': 'Item_02'},
{'location_03': 'Item_03', 'location_02': 'Item_02', 'location_01': 'Item_01'}]
If you instead want the permutations of all values so your resulting dictionaries are all different, use:
lst = [{k:v for k, v in zip(my_dict, vals)} for vals in permutations(my_dict.values())]
>>> lst
[{'location_01': 'Item_01', 'location_02': 'Item_02', 'location_03': 'Item_03'},
{'location_01': 'Item_01', 'location_02': 'Item_03', 'location_03': 'Item_02'},
{'location_01': 'Item_02', 'location_02': 'Item_01', 'location_03': 'Item_03'},
{'location_01': 'Item_02', 'location_02': 'Item_03', 'location_03': 'Item_01'},
{'location_01': 'Item_03', 'location_02': 'Item_01', 'location_03': 'Item_02'},
{'location_01': 'Item_03', 'location_02': 'Item_02', 'location_03': 'Item_01'}]
Upvotes: 2
Reputation:
Try permutations
import itertools
d={"location_01":"Item_01", "location_02":"Item_02", "location_03":"Item_03"}
x=[dict(zip(d, v)) for v in itertools.permutations(d.values(),3)]
for i in x:
print(i)
Upvotes: 0