解析 json 并对内容进行分组

Ros*_*n r 0 python python-2.7

我有一个给出 JSON 结果的 URL。我可以解析 json 并从 JSON 打印数据。但我的主要目的是将每个内容分组并将它们打印到 Excel 工作表中。

我写的代码是:

import json
import urllib2
url = urllib2.urlopen("urlquery")
data = json.load(url)
print data
Run Code Online (Sandbox Code Playgroud)

数据以dict类型打印。在此,每个内容具有至少10个参数喜欢IDNameRatingGenrePoster,等。

如何使用所有参数对每个内容进行分组?我被困在这里,但从小组中我知道如何打印到 Excel 工作表中。

示例 JSON 响应如下:

{
    facets: { },
    contents: [
       {
           id: "groupid://7110070",
           type: "group",
           adult: false,
           source: "group",
           instanceId: "groupid://7110070",
           parentalRating: {
           scheme: "custom",
           rating: 0
       },
Run Code Online (Sandbox Code Playgroud)

出于安全考虑,我无法显示整个文件。

ami*_*che 7

您可以使用itertools.groupbycontents定的键进行分组。看看如何使用 Python 的 itertools.groupby()?想要查询更多的信息。

在下面,我contents使用category键进行分组,键可以是您想要从字典中输入的任何内容:

from itertools import groupby


contents = [
    dict(adult=True, id=111, name="Bob"),
    dict(adult=False, id=332, name="Chris"),
    dict(adult=True, id=113, name="John"),
    dict(adult=False, id=224, name="Amir"),
    dict(adult=True, id=115, name="Yann"),
    dict(adult=False, id=336, name="Lee"),
    dict(adult=False, id=227, name="Nadia"),
    dict(adult=False, id=228, name="Lucy")
]

# XXX: make sure to sort the content list
# with the key you want to group by
contents.sort(key=lambda content: content['adult'])

# then use groupby with the same key
groups = groupby(contents, lambda content: content['adult'])

for adult, group in groups:
    print 'adult', adult
    for content in group:
        print '\t', content
Run Code Online (Sandbox Code Playgroud)

这是输出:

adult False
    {'id': 332, 'name': 'Chris', 'adult': False}
    {'id': 224, 'name': 'Amir', 'adult': False}
    {'id': 336, 'name': 'Lee', 'adult': False}
    {'id': 227, 'name': 'Nadia', 'adult': False}
    {'id': 228, 'name': 'Lucy', 'adult': False}
adult True
    {'id': 111, 'name': 'Bob', 'adult': True}
    {'id': 113, 'name': 'John', 'adult': True}
    {'id': 115, 'name': 'Yann', 'adult': True}
Run Code Online (Sandbox Code Playgroud)