Я борюсь с этим за цикл. Я хочу обновить значение вложенного словаря со списком. следующие работы, но я хотел бы использовать для цикла для уплотнения кода. "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 для циклов, поэтому я решил, что мне нужны вложенные словарные слова, чтобы сделать все в одну строку. Я не уверен, что это правильно, но с моими ограниченными знаниями, которые, кажется, правильное направление. мои вопросы: как мне это сделать? кто-то, пожалуйста, помогите. Еще раз спасибо за ваше время.
Вы можете использовать итератор, чтобы вместо этого использовать значения binary_list
:
iter_binary_list = iter(binary_list)
for truck in Trucks:
for day in Days:
requests[truck][day] = next(iter_binary_list)
что вы делаете неправильно, j для j в binary_list] создаст список для каждого запроса [truck] [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
Вы можете использовать понимание словаря, чтобы сделать это в одном лайнере и более "питоническим" способом следующим образом:
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}}
Это то, что вы хотите?
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)}