私はかなりPythonの新人です。そして、私はn深度の辞書を使って最終結果としてフィルタクエリを構築しようとしています。その中には他の辞書やリストがあります。Pythonでリストやその他の辞書を含む深くネストされた辞書をトラバースするにはどうしたらいいですか?
これは私の構造です:!
filters = {
predicate: 'AND',
filters: [
{'property_class_id': 10, operator: 'contains', operands: ['FOO']},
{
predicate: 'NOT',
filters: [{
predicate: 'OR',
filters: [
{'property_class_id': 1, operator: 'contains', operands: ['Hello']},
{'property_class_id': 2, operator: 'contains', operands: ['my search term']}
]
}]
},
{
predicate: 'OR',
filters: [
{'property_class_id': 3, operator: 'contains', operands: ['my search term']},
{'property_class_id': 4, operator: 'contains', operands: ['my search term']}
]
}
]
}
私は、これはQオブジェクトとA +(B OR C)+(D OR E)に変換するだろう期待しています。
しかし、私の最初の問題は、どのように各キー値のペアを通過するこの辞書を横断するのですか?
これはこれまでのものですが、forループは辞書のみを受け入れるため、リストにヒットしたら制限を見ることができます。
def unpack_filter(self, filters):
q_object = Q()
q_list = []
for key, value in filters.iteritems():
if isinstance(value, list) or isinstance(value, dict):
self.unpack_filter(value)
else:
print "{0} : {1}".format(key, value)