2016-12-08 11 views
-2

私はバッチでSQLにneo4jを移行しています。私は、次のようなデータ構造を持つようにしたい:1つのライナー - 辞書の理解

[{key1_1: value1_1, key1_2: value1_2}, {key2_1: value2_1, key2_2: value2_2}, etc}] 

私はのNeo4jクエリの結果を解析し、次のコード行があります

data = [{r.__dict__['_keys']: r.__dict__['_values']} for r in result] 

をしかし、これは、データを返します

[{(key1_1, key1_2): (value1_1, value1_2)}, {(key2_1, key2_2): (value2_1, value2_2)}, etc] 

可能であれば、いいライナーでデータを争奪する方法はありますか?

答えて

2

あなたは何のdictの内包表記は必要ありません、キーと値を圧縮する必要がある、とdict()コールにそれらを渡したい:

ここ
data = [dict(zip(r._keys, r._values)) for r in result] 

、各dict()コールはその(key, value)ペアから新しい辞書を作成しますzip()出力

ここでは__dict__に直接アクセスしませんでしたが、_keys_valuesの属性で十分です。

デモ:

>>> class Record(object): 
...  def __init__(self, keys, values): 
...   self._keys, self._values = keys, values 
... 
>>> result = [Record(('key1_1', 'key1_2'), ('value1_1', 'value1_2')), Record(('key2_1', 'key2_2'), ('value2_1', 'value2_2'))] 
>>> [dict(zip(r._keys, r._values)) for r in result] 
[{'key1_1': 'value1_1', 'key1_2': 'value1_2'}, {'key2_1': 'value2_1', 'key2_2': 'value2_2'}] 
1

それは、これはあなたの例では、明示的な入力を言及しなかったことを考えると動作するかどうかを確実に知ることは難しいです。しかし、私は、これは動作するはずとします

data = [dict(zip(r.__dict__['_keys'], r.__dict__['_values'])) for r in result] 

これはあなたのsubdictsのそれぞれであなたのキーと値をアンパック。

関連する問題