2013-03-09 5 views
2

다음 사전의 필터 [X] ... 키/값을 (중첩 된) 사전 목록으로 자동 변환하는 가장 쉬운 방법은?사전을 사전 목록으로 변환

{'filter[0][data][type]': u'string', 
'filter[0][data][value]': u'T', 
'filter[0][field]': u'company', 
'filter[1][data][comparison]': u'lt', 
'filter[1][data][type]': u'numeric', 
'filter[1][data][value]': u'100', 
'filter[1][field]': u'price', 
'filter[2][data][comparison]': u'gt', 
'filter[2][data][type]': u'numeric', 
'filter[2][data][value]': u'10', 
'filter[2][field]': u'price', 
'limit': u'10', 
'page': u'1', 
'sort': u'[{"property":"company","direction":"ASC"}]', 
'start': u'0'} 

I의 모습 원하는 결과 : 철탑이 extjs라는 그리드 필터 플러그인 GET 요청

에서 전달에서

[ 
    {'data': {'type': 'string', 'value': 'T'}, 'field': 'company'}, 
    {'data': {'comparison': 'lt', 'type': 'numeric', 'value': 100}, 
    'field': 'price'}, 
    {'data': {'comparison': 'gt', 'type': 'numeric', 'value': 10}, 
    'field': 'price'} 
] 

초기 dictonary은 또한에 extjs 격자 필터의 옵션이 있습니다 필터 json 인코딩을 사용하면 다음과 같이 끝납니다.

{ 'filter': u'[{"type":"string","value":"T","field":"company"},{"type":"numeric","comparison":"lt","value":100,"field":"price"},{"type":"numeric","comparison":"gt","value":10,"field":"price"}]', 
'limit': u'10', 
'page': u'1', 
'sort': u'[{"property":"company","direction":"ASC"}]', 
'start': u'0'} 

다시 이 자동으로 파이썬 목록 및 dict로 변환하는 방법 아이디어.

사전에 작성된 사전 목록을 사용하여 목록을 반복하고 SQL 쿼리를 자동 생성 할 수 있으므로 쿼리 필터의 양을 미리 알지 못합니다. (어쩌면 더 좋은 방법이 있겠습니까?)

+4

죄송합니다. 귀하가 여기서 무엇을 요구하고 있는지 파악하기가 어렵습니다. 자신이 시도한 것을 보여주기 위해 몇 가지 코드를 포함 시키면 도움이 될 것입니다. 아마도 당신은 http://whathaveyoutried.com에서 좋은 질문을하는 방법에 관한 훌륭한 기사를 볼 수도 있습니다. –

+0

나는 그것이 성취하기를 원하는 것이 분명하다고 생각했다. 그러나 주먹 대답을 보면 이것은 사실이 아니기 때문에 나는 질문을 업데이트했고 지금은 더 나아질 것을 희망한다. – Flo

+0

초기 사전도 파이썬 형식으로 작성하십시오. 'pprint' 모듈을 사용하여 멋지게 형식화 된 예제를 만들 수 있습니다 ('import pprint; pprint.pprint (filter)'). –

답변

0

해결책을 찾았습니다. json 인코딩으로 필터를 전달한 다음 json.loads()를 사용하면 문제가없고 사전 목록이 표시됩니다.

>>> import json 

>>> dict = {'filter': u'[{"type":"string","value":"T","field":"company"},{"type":"numeric","comparison":"lt","value":100,"field":"price"},{"type":"numeric","comparison":"gt","value":10,"field":"price"}]', 
'limit': u'10', 
'page': u'1', 
'sort': u'[{"property":"company","direction":"ASC"}]', 
'start': u'0'} 

>>> json.loads(dict['filter']) 

[{u'field': u'company', u'type': u'string', u'value': u'T'}, 
{u'comparison': u'lt', 
    u'field': u'price', 
    u'type': u'numeric', 
    u'value': 100}, 
{u'comparison': u'gt', u'field': u'price', u'type': u'numeric', u'value': 10}] 
+0

코드를 보여주십시오. 미래의 방문자를 도울 수 있습니다. –

관련 문제