2013-06-30 88 views
0

內從名單列表如果我有:創建namedtuple

resultObject = json.loads(resultQuery, object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) 
SearchResults = resultObject.result.songs 

返回類似:

X(jsonrpc=u'2.0', id=u'dynamicQuery', result=X(limits=X(start=0, total=149, end=149), songs=[X(songid=1804, label=u'Lake of Fire (unplugged)'), X(songid=1805, label=u'Rape Me')] 

我怎麼返回一個列表,只有每一個「標籤」?

我需要使用for循環並獲取每首歌曲的標籤並將其附加到我的列表中嗎?

還是有更簡單的方法,我只是還沒有找到呢?

回答

0

你不得不特殊情況的處理歌曲:

def load_object(d): 
    if 'songid' in d: 
     return d['label'] 
    keys = sorted(d) 
    return namedtuple('X', keys)(*(d[k] for k in keys)) 

resultObject = json.loads(resultQuery, object_hook=load_object) 

此排序鍵以及確保你得到一致的對象(順序相同)。

這給了你:

>>> json.loads(t, object_hook=load_object) 
X(id=u'dynamicQuery', jsonrpc=u'2.0', result=X(limits=X(end=149, start=0, total=149), songs=[u'Lake of Fire (unplugged)', u'Rape Me'])) 
+0

謝謝你,完美的作品......它會採取我天看着辦吧... –

+0

對不起,完全新的論壇 - didn't REALIZE投票你不會在我的水平...你的答案是「接受」,我非常感激它... ... - –