如何从给定的字典中获取所有组合?
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)
如何在 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)