Python 字典键和值的笛卡尔积

Python 字典键和值的笛卡尔积,python,dictionary,cartesian-product,Python,Dictionary,Cartesian Product,我有两个数据列表: 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_course

我有两个数据列表:

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)
其结果是:

#打印(Dic#u课程#u房间容量):{('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循环遍历这两个字典,但结果是每个键(=元组)的数字总是相同的

有什么想法吗? 顺致敬意,
Jan

通过两个字典进行简单迭代,将元组和绝对差添加到另一个字典中:

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
way:

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}
类似于dict((t,abs(dic_课程[t[0]]-dic_房间[t[1]])的dict(
dict)在dic_课程_房间(Capacity.keys())中的作用