使用collections.defaultdict
作爲Schedule
,你可以簡單地通過增加c
s到列表:
from collections import defaultdict
schedule = defaultdict(list)
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
schedule[(m,t)].extend([c])
(順便說一句,你應該正確地根據PEP8命名變量具體來說,使用under_store
變量名和。函數名和CapWords
類名)
更新:
要編寫defaultdict
到CSV,您可以考慮以下方法:導入CSV
from collections import defaultdict
schedule = defaultdict(list)
schedule[1, 1] = [2, 3, 4]
schedule[1, 2] = [3, 4, 5]
schedule[1, 3] = [4, 5, 6]
schedule[1, 4] = [5, 6, 7]
with open("data.csv", "wb") as f:
csv.writer(f).writerows([k, ] + v for k, v in schedule.iteritems())
另外,我想知道如果LpVariable.varValue
可以返回列表。如果是這樣,則follwoing變化應該工作:
#schedule=defaultdict(list)
schedule = LpVariable.dicts("schedule", (moderator, time))
# ... many lines ...
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
#schedule[(m,t)].extend([c])
schedule.setdefault(m, {}).setdefault(t, []).append(c)
# List entries in model output area
for (m,t) in mt:
if len(schedule[(m,t)])>0:
print (m,t), schedule[m][t]
#print (m,t), schedule[(m,t)]
# ... many lines ...
for (m,t) in mt:
timetable[m,t]=schedule[m][t].varValue
#timetable[m,t]=schedule[m,t].items()
你可以在這裏閱讀在改變的代碼:http://pastebin.com/UCVjqRwQ
感謝很多答案(和提醒)。 Im新的python,因爲我只用它來解決excel中的線性模型(使用solverstudio,但使用ironpython求解器)。 我現在使用: 從集合導入defaultdict 時間表= defaultdict(列表) 在MCT(M,C,T): 如果Ymct [M] [C] [T] .varValue> 0: (m,t),如果len(schedule [(m,t)])> 0,則表示(m,t)時間表[(米,噸)] –
林不知道如果我做錯了什麼,但它仍然不會允許我將列表添加到我的工作簿中的單元格(並且它沒有添加時,我使用此代碼)。我在電子表格的某個範圍上定義了計劃[(m,t)],但沒有任何更改。我甚至不確定solverstudio(有紙漿)是否允許在單元格中列出:S 我至少可以使用「print」命令在模型輸出部分獲得答案。這比我想象的要好:D 如果您對我可能做錯的任何其他想法,請讓我知道 –
@MarilizevanBuisbergen沒有解決方案中如何使用Schedule的代碼,恐怕我將無法分辨爲什麼它不會允許您將列表添加到單元格中。 –