Cho từ điển Python có giá trị là list trong các cặp khóa-giá trị. Cần tạo list biểu diễn tất cả tổ hợp khóa-giá trị từ các list trong từ điển.
Sử dụng sorted và product
Hàm product() từ itertools tạo tích Descartes của các iterable. Sắp xếp từ điển, dùng 2 vòng lặp for tạo tổ hợp tất cả cặp khóa-giá trị từ các list trong dict.
Ví dụ
import itertools as it
Adict = {
"Day": ["Tue", "Wed"],
"Time": ["2pm", "9am"],
}
# Sắp xếp Adict
sorted_Adict = sorted(Adict)
# Sử dụng product sau khi sắp xếp
res = [dict(zip(sorted_Adict, prod))
for prod in it.product(*(Adict[sorted_Adict] for sorted_Adict in sorted_Adict))]
# In kết quả
print(res)
Kết quả
Chạy đoạn mã trên cho kết quả sau:
[{'Day': 'Tue', 'Time': '2pm'}, {'Day': 'Tue', 'Time': '9am'}, {'Day': 'Wed', 'Time': '2pm'}, {'Day': 'Wed', 'Time': '9am'}]
Sử dụng zip
Dùng zip() cùng itertools.product() tạo tổ hợp tất cả khóa-giá trị từ dict of lists.
Ví dụ
import itertools as it
Adict = {
"Day": ["Tue", "Wed"],
"Time": ["2pm", "9am"],
}
# Sắp xếp Adict
sorted_Adict = sorted(Adict)
# Sử dụng product sau khi sắp xếp
res = [[{key: value} for (key, value) in zip(Adict, values)]
for values in it.product(*Adict.values())]
# In kết quả
print(res)
Kết quả
Chạy đoạn mã trên cho kết quả sau:
[[{'Day': 'Tue'}, {'Time': '2pm'}], [{'Day': 'Tue'}, {'Time': '9am'}], [{'Day': 'Wed'}, {'Time': '2pm'}], [{'Day': 'Wed'}, {'Time': '9am'}]]