5

私は、Python (私の最初の Python コード) を使用して線形計画法最適化モデルを作成しようとしている AMPL ユーザーです。複合セットに対してインデックス付きパラメーターを宣言する方法を見つけようとしています。たとえば、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 の 6 つのフィールドがあります。そのうちの 3 つ (A、B、C) は主キーで、残り (x、y、z) は主キーにインデックス付けされた値です。

PYTHON PART: PYODBC モジュールを使用して SQL Server に接続しています。「dict」を試しましたが、1 つのキーしかインデックスできません。最初の 3 つのフィールドを複合セットとして宣言し、x、y、z を複合セットのインデックス付きの値として宣言するには、どの Python 機能を使用すればよいかわかりません。

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)

もちろん、それは正しくありません。これを行う方法について考えることができません。

助けてください:)よろしくお願いします!

4

1 に答える 1

2

これの代わりに:

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、つまりABCの順序が重要な場合):

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 の場合、つまり ABC の順序は重要ではありません):

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
于 2013-07-20T17:19:44.617 に答える