Computer >> Máy Tính >  >> Lập trình >> Python

Kết hợp các giá trị từ từ điển danh sách trong Python

Giả sử chúng ta có một từ điển python có các danh sách vì nó có giá trị trong các cặp giá trị khóa. Chúng tôi cần tạo một danh sách sẽ đại diện cho tất cả các kết hợp có thể có của các khóa và giá trị từ các danh sách đã cho.

Với sản phẩm và được sắp xếp

Hàm sản phẩm từ itertools có thể được sử dụng để tạo sản phẩm crtesian của có thể lặp được cung cấp cho nó dưới dạng tham số. Chúng tôi sắp xếp từ điển và sử dụng hai vòng lặp for để tạo sự kết hợp của tất cả các cặp giá trị khóa có thể có từ danh sách trong từ điển.

Ví dụ

import itertools as it
Adict = {
   "Day": ["Tue", "Wed"],
   "Time": ["2pm", "9am"],
}
# Sorting Adict
sorted_Adict = sorted(Adict)
# Using product after sorting
res = [dict(zip(sorted_Adict, prod))
   for prod in it.product(*(Adict[sorted_Adict]
      for sorted_Adict in sorted_Adict))]
# Printing output
print(res)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

[{'Day': 'Tue', 'Time': '2pm'}, {'Day': 'Tue', 'Time': '9am'}, {'Day': 'Wed', 'Time': '2pm'}, {'Day': 'Wed', 'Time': '9am'}]

Với zip

Trong cách tiếp cận này, chúng tôi sử dụng hàm zip cùng với hàm sản phẩm itertools để tạo sự kết hợp của tất cả các khóa và giá trị có thể tạo thành từ điển danh sách.

Ví dụ

import itertools as it
Adict = {
   "Day": ["Tue", "Wed"],
   "Time": ["2pm", "9am"],
}
# Sorting Adict
sorted_Adict = sorted(Adict)
# Using product after sorting
res = [[{key: value} for (key, value) in zip(Adict, values)]
   for values in it.product(*Adict.values())]
# Printing output
print(res)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

[[{'Day': 'Tue'}, {'Time': '2pm'}], [{'Day': 'Tue'}, {'Time': '9am'}], [{'Day': 'Wed'}, {'Time': '2pm'}], [{'Day': 'Wed'}, {'Time': '9am'}]]