Ich bin ziemlich neu in Python und ich versuche, Filterabfrage als mein Endergebnis mit einem Wörterbuch mit n-Tiefe aufzubauen. Im Inneren könnte es andere Wörterbücher und Listen geben.Wie kann ich ein tief verschachteltes Wörterbuch durchqueren, das in Python Listen und andere Wörterbücher enthält?
Dies ist meine Struktur:
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']}
]
}
]
}
Ich hoffe, ich dies auf A + übersetzen würde (B oder C) + (D oder E) mit Q-Objekte!.
Mein erstes Problem ist jedoch, wie durchlaufe ich dieses Wörterbuch durch jedes Schlüsselwertpaar?
Dies ist, was ich bisher habe, aber Sie können die Begrenzung sehen, sobald ich eine Liste triff, da die for-Schleife nur Wörterbücher akzeptiert.
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)