我为此for循环而苦苦挣扎。我想用列表更新嵌套字典的值。以下作品,但我想使用for循环来压缩代码。 "status"
是一个嵌套的字典,具有外键"A"
和"B"
,而binary_list[]
仅具有全1。
Trucks = ["A", "B"]
Days= ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"]
requests={"A": {"Monday":0, "Tuesday":0, "Wednesday":0, "Thursday":0
"Friday":0, "Saturday":0, "Sunday":0},
"B": {"Monday":0, "Tuesday":0, "Wednesday":0, "Thursday":0,
"Friday":0, "Saturday":0, "Sunday":0}}
binary_list=[1,1,1,1,1,1,1,1,1,1,1,1,1,1]
status["A"]["Monday"]=binary_list[0]
status["A"]["Tuesday"]=binary_list[1]
status["A"]["Wednesday"]=binary_list[2]
status["A"]["Thursday"]=binary_list[3]
status["A"]["Friday"]=binary_list[4]
status["A"]["Saturday"]=binary_list[5]
status["A"]["Sunday"]=binary_list[6]
status["B"]["Monday"]=binary_list[7]
status["B"]["Tuesday"]=binary_list[8]
status["B"]["Wednesday"]=binary_list[9]
status["B"]["Thursday"]=binary_list[10]
status["B"]["Friday"]=binary_list[11]
status["B"]["Saturday"]=binary_list[12]
status["B"]["Sunday"]=binary_list[13]
我尝试了什么:
for truck in Trucks:
for day in Days:
requests[truck][day]=[j for j in binary_list]
这将在列表中产生14 1作为每天的值。我知道为什么会这样。这是因为有2个for循环,所以我想我需要一个嵌套的字典理解才能使所有内容变成一行。我不确定这是正确的,但据我所知,这似乎是正确的方向。我的问题是我该怎么做?有人可以帮忙吗?感谢你的宝贵时间。
答案 0 :(得分:1)
您可以使用迭代器遍历binary_list
的值:
iter_binary_list = iter(binary_list)
for truck in Trucks:
for day in Days:
requests[truck][day] = next(iter_binary_list)
答案 1 :(得分:1)
您所做的是错误的,binary_list中的j为j会为每个请求[卡车] [day]创建一个列表,这不是您想要的,您想要的是这样的
binary_list_iterator=0
for truck in Trucks:
for day in Days:
requests[truck][day]=binary_list[binary_list_iterator]
binary_list_iterator+=1
答案 2 :(得分:1)
这是您想要的吗?
requests = {t: {d: 1 for d in Days} for t in Trucks}
或者如果您想迭代所有内容
requests = {t: {d: binary_list[i*len(Days)+j] for j, d in enumerate(Days)} for i, t in enumerate(Trucks)}
答案 3 :(得分:1)
您可以使用字典理解以一种衬里和更多“ pythonic”方式执行此操作,如下所示:
it = iter(binary_list)
status = {x: {d: next(it) for d in Days} for x in Trucks}
# outputs: {'A': {'Monday': 1, 'Tuesday': 1, 'Wednesday': 1, 'Thursday': 1, 'Friday': 1, 'Saturday': 1, 'Sunday': 1}, 'B': {'Monday': 1, 'Tuesday': 1, 'Wednesday': 1, 'Thursday': 1, 'Friday': 1, 'Saturday': 1, 'Sunday': 1}}