字典键和值的笛卡尔积 Python
Cartesian Product of Dictionary Keys and Values Python
我有两个包含数据的列表:
COURSES = [C1, C2, C3]
ROOMS = [R1, R2, R3]
我已经创建了一个包含笛卡尔积的元组列表:
L_CR = list(itertools.product(COURSES, ROOMS))
#print(L_CR): [('C1', 'R1'), ('C1', 'R2'), ('C1', 'R3'), ('C2', 'R1').....
现在我已经创建了两个字典,用于存储关于参加课程的人数和容纳房间的最大人数的整数值:
dic_courses = {'C1': 10, 'C2': 5, 'C3': 20}
dic_rooms = {'R1': 5, 'R2': 10, 'R3': 20}
我想不通的是如何创建一个以元组作为键的字典,以及一个房间的最大人数与参加课程的人数之间的绝对差异。
到目前为止我所做的是创建一个字典,它将每个元组存储为一个键,每个键的值都被分配为 1:
Dic_Courses_Room_Capacity = {}
for Element in L_CR:
Dic_Courses_Room_Capacity_Temp = {Element: 1}
Dic_Courses_Room_Capacity.update(Dic_Students_Room_Capacity_Temp)
这导致:
#print(Dic_Courses_Room_Capacity): {('C1', 'R1'): 1, ('C1', 'R2'): 1, ('C1', 'R3'): 1...
但我正在寻找的是:
#print(Dic_Courses_Room_Capacity): {('C1', 'R1'): 5 , ('C1', 'R2'): 0, ('C1', 'R3'): 10
其中例如:('C1', 'R3'): 10 = abs('C1' -'R3') = abs(10-20) = abs(-10 ) = 10
所以我必须用其他两个词典的所有计算组合更新我现有的词典 (Dic_Courses_Room_Capacity)。我试图用两个 for 循环遍历这两个字典,但这导致每个键(=元组)总是得到相同的数字。
有什么想法吗?
最好的祝福,
一月
通过两个字典的简单迭代,将元组和绝对差添加到另一个:
dic_courses = {'C1': 10, 'C2': 5, 'C3': 20}
dic_rooms = {'R1': 5, 'R2': 10, 'R3': 20}
d = {}
for k1, v1 in dic_courses.items():
for k2, v2 in dic_rooms.items():
d.update({(k1, k2): abs(v1 - v2)})
print(d)
# {('C1', 'R1'): 5, ('C1', 'R2'): 0, ('C1', 'R3'): 10,
# ('C2', 'R1'): 0, ('C2', 'R2'): 5, ('C2', 'R3'): 15,
# ('C3', 'R1'): 15, ('C3', 'R2'): 10, ('C3', 'R3'): 0}
或itertools.product
方式:
from itertools import product
dic_courses = {'C1': 10, 'C2': 5, 'C3': 20}
dic_rooms = {'R1': 5, 'R2': 10, 'R3': 20}
d = {}
for x, y in product(dic_courses, dic_rooms):
d.update({(x, y): abs(dic_courses[x] - dic_rooms[y])})
print(d)
# {('C1', 'R1'): 5, ('C1', 'R2'): 0, ('C1', 'R3'): 10,
# ('C2', 'R1'): 0, ('C2', 'R2'): 5, ('C2', 'R3'): 15,
# ('C3', 'R1'): 15, ('C3', 'R2'): 10, ('C3', 'R3'): 0}
我有两个包含数据的列表:
COURSES = [C1, C2, C3]
ROOMS = [R1, R2, R3]
我已经创建了一个包含笛卡尔积的元组列表:
L_CR = list(itertools.product(COURSES, ROOMS))
#print(L_CR): [('C1', 'R1'), ('C1', 'R2'), ('C1', 'R3'), ('C2', 'R1').....
现在我已经创建了两个字典,用于存储关于参加课程的人数和容纳房间的最大人数的整数值:
dic_courses = {'C1': 10, 'C2': 5, 'C3': 20}
dic_rooms = {'R1': 5, 'R2': 10, 'R3': 20}
我想不通的是如何创建一个以元组作为键的字典,以及一个房间的最大人数与参加课程的人数之间的绝对差异。 到目前为止我所做的是创建一个字典,它将每个元组存储为一个键,每个键的值都被分配为 1:
Dic_Courses_Room_Capacity = {}
for Element in L_CR:
Dic_Courses_Room_Capacity_Temp = {Element: 1}
Dic_Courses_Room_Capacity.update(Dic_Students_Room_Capacity_Temp)
这导致:
#print(Dic_Courses_Room_Capacity): {('C1', 'R1'): 1, ('C1', 'R2'): 1, ('C1', 'R3'): 1...
但我正在寻找的是:
#print(Dic_Courses_Room_Capacity): {('C1', 'R1'): 5 , ('C1', 'R2'): 0, ('C1', 'R3'): 10
其中例如:('C1', 'R3'): 10 = abs('C1' -'R3') = abs(10-20) = abs(-10 ) = 10
所以我必须用其他两个词典的所有计算组合更新我现有的词典 (Dic_Courses_Room_Capacity)。我试图用两个 for 循环遍历这两个字典,但这导致每个键(=元组)总是得到相同的数字。
有什么想法吗? 最好的祝福, 一月
通过两个字典的简单迭代,将元组和绝对差添加到另一个:
dic_courses = {'C1': 10, 'C2': 5, 'C3': 20}
dic_rooms = {'R1': 5, 'R2': 10, 'R3': 20}
d = {}
for k1, v1 in dic_courses.items():
for k2, v2 in dic_rooms.items():
d.update({(k1, k2): abs(v1 - v2)})
print(d)
# {('C1', 'R1'): 5, ('C1', 'R2'): 0, ('C1', 'R3'): 10,
# ('C2', 'R1'): 0, ('C2', 'R2'): 5, ('C2', 'R3'): 15,
# ('C3', 'R1'): 15, ('C3', 'R2'): 10, ('C3', 'R3'): 0}
或itertools.product
方式:
from itertools import product
dic_courses = {'C1': 10, 'C2': 5, 'C3': 20}
dic_rooms = {'R1': 5, 'R2': 10, 'R3': 20}
d = {}
for x, y in product(dic_courses, dic_rooms):
d.update({(x, y): abs(dic_courses[x] - dic_rooms[y])})
print(d)
# {('C1', 'R1'): 5, ('C1', 'R2'): 0, ('C1', 'R3'): 10,
# ('C2', 'R1'): 0, ('C2', 'R2'): 5, ('C2', 'R3'): 15,
# ('C3', 'R1'): 15, ('C3', 'R2'): 10, ('C3', 'R3'): 0}