kan*_*hal 5 python set mathematical-optimization ampl gurobi
我是AMPL用户,试图使用Python(我的第一个Python代码)编写线性编程优化模型.我试图找到如何在复合集上声明索引参数.例如,在AMPL中,我会说:Set A Set B Set C param x {A,B,C} param y {A,B,C} param z {A,B,C}上述设置和参数可以是通过AMPL轻松读取数据库.
我从数据库中读取的表有六个字段,即A,B,C,x,y,z.其中三个是主键(A,B,C),其余(x,y,z)是在主键上索引的值.
PYTHON PART:我正在使用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)
Run Code Online (Sandbox Code Playgroud)
当然,这是不正确的.我想不出办法做到这一点.
请帮帮我:)提前致谢!
代替这个:
Comp_Key, x, y, z= dict((A, B, C, [x,y,z]) for A, B, C, x, y, z in result)
Run Code Online (Sandbox Code Playgroud)
你可以这样做(如果 A, B, C != B, A, C,即 ABC 的顺序很重要):
final_result = dict(((A, B, C), [x, y, z]) for A, B, C, x, y, z in result)
Run Code Online (Sandbox Code Playgroud)
或者
final_result = {(A, B, C): [x, y, z] for A, B, C, x, y, z in result} # more readable than first one
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做(如果 A, B, C == B, A, C,即 ABC 的顺序并不重要):
final_result = dict((frozenset(A, B, C), [x, y, z]) for A, B, C, x, y, z in result)
Run Code Online (Sandbox Code Playgroud)
或者
final_result = {frozenset(A, B, C): [x, y, z] for A, B, C, x, y, z in result} # more readable than first one
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |