2016-12-03 7 views
2

iAMPL jupyterノートブックマジックの結果として得られるインスタンスがあります。どのように私はそれをPythonの辞書に変換できますか?すべての試みが失敗したこのの正確な型を見つけるために、以来、私は実用的なアプローチを試してみてくださいよ、タイプインスタンスを辞書に変換する

{('87', '41'): 0.0, ('59', '20'): 0.0, ('32', '40'): 0.0, ('49', '2'): 0.0, ('1', '20'): 0.0, ('21', '17'): 0.0, ('92', '3'): 0.0, ('55', '30'): 0.0, ('3', '15'): 0.0, ('8', '51'): 0.0, ('24', '28'): 0.0, ('18', '44'): 0.0, ('82', '38'): 0.0, ('63', '47'): 0.0, ('102', '47'): 0.0, ('87', '11'): 0.0, ('79', '14'): 0.0, ('4', '30'): 0.0, ('63', '6'): 0.0, ('71', '10'): 0.0, ('11', '33'): 0.0, ('54', '50'): 0.0, ('25', '13'): 0.0, ('47', '24'): 0.0, ('77', '1'): 1.0, ('3', '27'): 0.0, ('73', '7'): 0.0, ('63', '17'): 0.0, ('45', '21'): 0.0, ('16', '22'): 0.0, ('23', '29'): 0.0, ('7', '1'): 0.0, ('51', '2'): 0.0, ('83', '47'): 0.0, ('65', '51'): 0.0 
+0

欠けている中括弧は、実際には辞書のように見えます。それは文字列ですか? "type(x)' "" –

+0

実際にはもっと長いです。結果は、105 * 56行列を返すソルバーからの出力です。文字列は行番号と列番号で、floatは行列の値です。あなたが望むのであれば、マトリックスをどのように入手したかのコードを共有することができます。私はiAMPLを使用しています。これはhttp://zverovich.net/2013/01/08/ampl-magic-using-ipython-as-an-interface-to-ampl.htmlです。タイプ(x)を実行すると、 "インスタンス"が返されます。これは、初めて見ているので対処する方法がわかりません。 –

+1

'dict(x)'の結果は何ですか? – ettanany

答えて

1

OK:

print(x) 

は、次の出力を返します。

import ast 

d = ast.literal_eval(str(x)) 

印刷xは、私は(最適ではないかもしれない)このように、X strとして変換を使用してast.literal_evalにそれを供給することである提案するので、何を、文字列形式で有効なPythonの辞書を印刷しているようです

d今、有効なPythonの辞書です:

print(d[('87','41')]) 

戻り0.0

もっと洗練されたソリューションがあるかもしれませんが、その間に仕事をしています。

+0

ありがとう、ジャン。今のところ動作していて、小さなデータセットを持っているので、十分速く –

関連する問題