กำหนด dictionary ที่ value เป็นลิสต์ ต้องการสร้างลิสต์ของ dictionary ทุก combination ของ key-value
ตัวอย่าง: {"Day": ["Tue","Wed"], "Time": ["2pm","9am"]} → 4 combinations
ใช้ sorted และ itertools.product
product(*dict.values()) สร้าง Cartesian product แล้ว zip กับ sorted keys
ตัวอย่าง
import itertools as it
Adict = {"Day": ["Tue", "Wed"], "Time": ["2pm", "9am"]}
sorted_Adict = sorted(Adict)
res = [dict(zip(sorted_Adict, prod)) for prod in it.product(*(Adict[sorted_Adict] for sorted_Adict in sorted_Adict))]
print(res)
ผลลัพธ์
[{'Day': 'Tue', 'Time': '2pm'}, {'Day': 'Tue', 'Time': '9am'}, {'Day': 'Wed', 'Time': '2pm'}, {'Day': 'Wed', 'Time': '9am'}]
ใช้ zip และ product
สร้างลิสต์ของ dict เดียวสำหรับแต่ละ key-value pair
ตัวอย่าง
import itertools as it
Adict = {"Day": ["Tue", "Wed"], "Time": ["2pm", "9am"]}
sorted_Adict = sorted(Adict)
res = [[{key: value} for (key, value) in zip(Adict, values)] for values in it.product(*Adict.values())]
print(res)
ผลลัพธ์
[[{'Day': 'Tue'}, {'Time': '2pm'}], [{'Day': 'Tue'}, {'Time': '9am'}], [{'Day': 'Wed'}, {'Time': '2pm'}], [{'Day': 'Wed'}, {'Time': '9am'}]]