2013-03-09 68 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'} 
] 

初始dictonary是從主塔從一個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列表和字典。

我不知道查詢過濾器的數量,所以用創建的字典列表我可以遍歷列表並自動生成一個SQL查詢。 (雖然也許有更好的方法來做到這一點?)

+4

對不起,但我覺得很難弄清楚你在這裏問什麼。如果您包含一些代碼以顯示您嘗試過的內容,它會有所幫助,這會讓我們更容易幫助您。也許你也可以看一下http://whathaveyoutried.com關於如何提出好問題的偉大文章? – 2013-03-09 11:54:31

+0

我認爲這顯然是我想達到的目標,但是看到拳頭的答案並非如此,所以我更新了這個問題,並希望現在更好。 – Flo 2013-03-09 19:10:18

+0

請以Python格式包含最初的字典。你可以使用'pprint'模塊來創建一個很好格式化的例子('import pprint; pprint.pprint(filter)')。 – 2013-03-09 19:15:22

回答

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

請顯示代碼。可以幫助未來的遊客。 – 2013-03-10 08:59:45