2013-07-20 15 views
5

Python (İlk Python kodum) kullanarak bir doğrusal programlama optimizasyonu modeli yazmaya çalışan bir AMPL kullanıcısıyım. Bileşik kümeler üzerinde dizinlenmiş parametrelerin nasıl bildirileceğini bulmaya çalışıyorum. Örneğin, AMPL içinde, i say: bir Set B Set C param x {A, B, C,} param y {A, B, C,} param z {A, B, C,} ayarlama Yukarıdaki ayarlar ve parametreler AMPL ile bir veritabanından kolayca okunabilir.AMPL vs. Python - Tabloları içe aktarma (çok boyutlu sözlükler?)

Veritabanından okuduğum tablo altı alana sahiptir, yani A, B, C, x, y, z. Bunlardan üçü birincil anahtar (A, B, C) ve geri kalanı (x, y, z) birincil anahtarlar üzerinde indekslenen değerlerdir.

PYTHON PART: SQL Server ile bağlanmak için PYODBC modülünü kullanıyorum. "Dict" ı denedim ama sadece bir anahtarın üzerine indekslenebilir. İlk üç alanı bir bileşik kümesi olarak bildirmek için hangi python özelliğinin kullanacağından emin değilim ve x, y ve z, bileşik kümesine dizinlenmiş değerler olarak.

Elbette doğru değil. Bunu yapmanın bir yolunu düşünemiyorum.

Lütfen yardım edin :) Şimdiden teşekkürler! Bunun yerine

cevap

2

:

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

Sen yapabileceği bu (eğer A, B, C = B, A, C, yani ABC sırası önemlidir!):

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

YA

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

Yoksa bu yapabileceğini (eğer A, B, C == B, A, C, fark etmez ABC yani sırası):

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

VEYA

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

Teşekkür deb !! Çok takdir! Merak ettiğim şey, bu tabloyu okumadan önce bu setleri ve parametreleri bildirmem mi gerekiyor? Evet ise nasıl? Ya da şunu yapmalıyım: 'A, B, C, x, y, z = final_result'? Buraya ulaştığım şey, onları okuduktan sonra setleri ve parametreleri nasıl ayırabilirim? –

+0

Python'da herhangi bir şey bildiremezsiniz (dinamik olarak yazılmıştır). Ve eğer tablonuzda [(A, B, C, x, y, z), (D, E, F, u, v, w) ...] 'gibi satır varsa, final_result değeri {{; A, B, C): [x, y, z], (D, E, F): [u, v, w] ...} ', tam olarak ne üzerinde sormak istersiniz? –

+0

Bir örnekle başlayayım. Verileri okuduğum tabloda, A = Kaynak, B = Hedef, C = Ürün, d = maliyet, e = hacim, f = miktar. Verileri bir sözlük olarak okuduktan sonra alan adlarına sahip olmak istiyorum, böylece setler (A, B, C) üzerinden indekslenebilir ve hesaplamalar yapmak için parametre değerlerini (x, y, z) alabilirim. –

İlgili konular