저는 파이썬에 상당히 익숙하며, 깊이있는 사전을 사용하여 최종 결과물로 필터 쿼리를 작성하려고합니다. 그 안에는 다른 사전과 목록이 있습니다. ! 나는이 Q 물체와 함께 A + (B 또는 C) + (D 또는 E)로 번역하는 것입니다 바라고파이썬에서 목록과 다른 사전을 포함하는 깊게 중첩 된 사전을 트래버스 할 수 있습니까?
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']}
]
}
]
}
:
이 내 구조입니다.
하지만 첫 번째 문제는이 사전을 통과하여 각 키 값 쌍을 통과하는 방법입니다.
이것은 내가 지금까지 가지고 있지만 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)