我有两个包含数据的列表:
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循环遍历这两个字典,但结果是每个键(=元组)总是得到相同的数字。
有什么想法吗? 最好的祝福, 扬
答案 0 :(得分:2)
通过两个字典进行简单迭代,将元组和绝对差添加到另一个字典中:
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}
方式:
version: 2
jobs:
build:
docker:
- image: circleci/node:8.9.1
steps:
- checkout
- restore_cache:
key: dependency-cache-{{ checksum "package.json" }}
- save_cache:
key: dependency-cache-{{ checksum "package.json" }}
paths:
- node_modules
- persist_to_workspace:
root: /home/circleci
paths: project
deploy:
docker:
- image: cibuilds/aws:1.16.1
steps:
- checkout
- attach_workspace:
at: /home/circleci
- run:
name: AWS S3
command: aws s3 sync build s3://<URL> --delete
workflows:
version: 2
build-and-deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: master