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'} 

В результате я хочу будет выглядеть так:

[ 
    {'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'} 
] 

Первоначальный справочник от Пилоны передается из сетки фильтра запроса ExtJS плагин GET

Существует также вариант в 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'} 

Но опять-таки у меня нет идея, как преобразовать этот автоматический в список python и dict.

Я не знаю заранее количество фильтров для запроса, поэтому с созданным списком словарей я могу перебирать список и автоматически генерировать SQL-запрос. (хотя, может быть, есть лучший способ сделать это?)

+4

Извините, но мне очень сложно понять, что вы здесь задаете. Это поможет, если вы включили некоторый код, чтобы показать, что вы пробовали, это облегчит нам помощь. Возможно, вы также можете взглянуть на http://whathaveyoutried.com за отличную статью о том, как задавать хорошие вопросы? –

+0

Я думал, что это было очевидно, чего я хотел достичь, но, глядя на кулачный ответ, это было не так, поэтому я обновил вопрос и надеюсь, что теперь это лучше. – Flo

+0

Пожалуйста, включите исходный словарь, а также в формате python. Вы можете использовать модуль '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

Просьба показать код. Может помочь будущим посетителям. –

Смежные вопросы