如何从给定的字典中获取所有组合?

How to get all combinations from a given dictionary?

如何在 python 中从给定的字典中获取所有组合(列出)?

我的输入:

my_dict = {"location_01":"Item_01", "location_02":"Item_02", "location_03":"Item_03"}

期望的输出:

[{"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"}]

你想 itertools 是对的,但你想要 排列 而不是 组合 :

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'}]

编辑:

如果您想要所有 的排列,这样您得到的字典就会完全不同,请使用:

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'}]

尝试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)