0

如果我有:

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

还是有一种我还没有找到的更简单的方法?

4

1 回答 1

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']))
于 2013-06-30T18:33:40.477 回答