AMPL与Python——导入表(多维字典?)



我是一名AMPL用户,试图使用Python(我的第一个Python代码)编写线性编程优化模型。我正试图找到如何在复合集上声明索引参数。例如,在AMPL中,我会说:集合A集合B设置C参数x{A,B,C}参数{A,B,C}参数z{A,B,C}上述设置和参数可以通过AMPL从数据库中轻松读取。

我从数据库中读取的表有六个字段,即A、B、C、x、y、z。其中三个字段是主键(A、B和C),其余字段(x、y和z)是在主键上索引的值。

PYTHON部分:我正在使用PYODBC模块来连接SQL Server。我试过"dict",但它只能对一个键进行索引。我不确定应该使用哪种python功能来将前三个字段声明为复合集,并将x、y和z声明为在复合集上索引的值。

import pyodbc    
con = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server Native Client 10.0}', server = 'Server', database='db')
cur = con.cursor()
cur.execute("execute dbo.SP @Param =%d" %Param)
result = cur.fetchall()
Comp_Key, x, y, z= dict((A, B, C, [x,y,z]) for A, B, C, x, y, z in result)

当然这是不对的。我想不出办法来做这件事。

请帮帮我:)提前感谢!

代替这个:

Comp_Key, x, y, z= dict((A, B, C, [x,y,z]) for A, B, C, x, y, z in result)

你可以这样做(如果A,B,C!=B,A,C,即A B C的顺序很重要):

final_result = dict(((A, B, C), [x, y, z]) for A, B, C, x, y, z in result)

final_result = {(A, B, C): [x, y, z] for A, B, C, x, y, z in result}  # more readable than first one

或者你可以这样做(如果A,B,C=B,A,C,即A B C的顺序无关紧要):

final_result = dict((frozenset(A, B, C), [x, y, z]) for A, B, C, x, y, z in result)

final_result = {frozenset(A, B, C): [x, y, z] for A, B, C, x, y, z in result}  # more readable than first one

最新更新