从namedtuple中的列表创建列表

时间:2013-06-30 18:29:52

标签: python json

如果我有:

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循环并获取每首歌曲的标签并将其附加到我的列表中?

或者是否有一种我以前无法找到的简单方法?

1 个答案:

答案 0 :(得分: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']))