2017-04-26 20 views
0

私は、データベースから値をフェッチしていると私は私が辞書をpythonで辞書に変換するには?

[{'defrosting': 32.0, 'temperature': 42.0, 'timestamp': u'2017-04-25T11:30:15.207', 'hotwater': 3.0, 'humidity': 32.0, 'tds': 34.0, 'coldwater': 43.0}] 

と私のような出力を得ている、次のよう

[dict((query.description[i][0], value) for i, value in enumerate(row)) for row in query.fetchall()] 

で行われているフェッチdictionary.Toにその値を変換したいですこの形式に変換したい

{'defrosting': 32.0, 'temperature': 42.0, 'timestamp': u'2017-04-25T11:30:15.207', 'hotwater': 3.0, 'humidity': 32.0, 'tds': 34.0, 'coldwater': 43.0} 
+0

あなたはdictsのリストを作成していますが、あなたは何を期待していますか? 1つの結果しかないことに注意してください。これは、1つの要素でリストを説明します。ちょうど最初のものを選んでください... –

+0

@akashkarothiya dic compではありません、それはset compです.dictはハッシュ可能ではありません(最初のコメントは正しいです) –

+0

** [** dict query.fetchall()]の行の(iの場合は(query.description [i] [0]、value)、列挙する場合は(row)の値です。 ** query.description [i] [0] ** –

答えて

0

クエリ結果の行ごとに1つの辞書を作成しています。それは常に正確に1つの結果を持っていますか、または最初の結果にのみ関心がありますか?ジャン=フランソワ・ファーブルが言ったようにそれからちょうどコメントで、最初の要素を選択:

[dict((query.description[i][0], value) for i, value in enumerate(row)) 
    for row in query.fetchall() 
][0] 

は、行が(このシナリオではそう)無料の情報が含まれていますか?そして、それから、単一の辞書を作る:

dict(
    (query.description[i][0], value) 
    for row in query.fetchall() 
    for i, value in enumerate(row) 
    ) 

私は個人的にdictコンストラクタよりも読みやすい辞書内包表記を見つける:

{ 
query.description[i][0]: value 
for row in query.fetchall() 
for i, value in enumerate(row) 
} 
+0

を使って機能しました。 [0]は壊れるでしょう – Surajano

+0

@Surajanoあなたが何を意味するのか分かりません。リストが空の場合、私の最初のコードブロックは 'IndexError'をスローします - そうです。それとも、なぜリストを作成するのですか? – L3viathan

+0

@khelwoodうわー、修正済み。 – L3viathan

2

一つだけの結果、query.fetchone()を使用しない何らかの理由が必要な場合、それは避けすべての結果を取得し、最初のもの以外のすべてを破棄する:

{query.description[i][0]: value for i, value in enumerate(query.fetchone())} 
関連する問題