Python 从json中提取密钥

Python 从json中提取密钥,python,json,Python,Json,我正在python框架中创建score web应用程序。因此,我有一个JSON文件,其中包含以下内容 { "page1": { "pr": { "user": "A", "timestamp": "2017-02-23T23:08:53Z" }, ... }, "page2": { "pr": { "user": "A",

我正在python框架中创建score web应用程序。因此,我有一个JSON文件,其中包含以下内容

{
    "page1": {
        "pr": {
            "user": "A",
            "timestamp": "2017-02-23T23:08:53Z"
        },
        ...
    },
    "page2": {
        "pr": {
            "user": "A",
            "timestamp": "2017-02-23T23:11:01Z"
        },
        ...
    },
    ...
}
{
    "A": { page1, page2, ...},
    "B": { page1, page2, ...},
    ...
}
我正在用python阅读这个文件

    with open("result.json", encoding="utf8") as file:
        data = json.load(file)
我想提取关于用户的pr页面键,并保存到另一个JSON文件中,包含以下内容

{
    "page1": {
        "pr": {
            "user": "A",
            "timestamp": "2017-02-23T23:08:53Z"
        },
        ...
    },
    "page2": {
        "pr": {
            "user": "A",
            "timestamp": "2017-02-23T23:11:01Z"
        },
        ...
    },
    ...
}
{
    "A": { page1, page2, ...},
    "B": { page1, page2, ...},
    ...
}

哦,只是为了挑战;-

虽然有一种更简单的方法可以注册用户访问的页面,但我将在这里发布一种功能性方法

您发布的数据结构似乎没有那么复杂,我认为以下内容应该适合您。首先,您需要一个数据样本列表。每个示例都包含页面和用户。然后,您可以简单地按用户分组,并根据需要检索条目以进行进一步处理

import toolz
import toolz.curried

stuff = {
    "page1": {
        "pr": {
            "user": "A",
            "timestamp": "2017-02-23T23:08:53Z"
        }
    },
    "page2": {
        "pr": {
            "user": "A",
            "timestamp": "2017-02-23T23:11:01Z"
        }
    },
    "page3": {
        "pr": {
            "user": "b",
            "timestamp": "2017-02-23T23:11:01Z"
        }
    }
}

transformed_stuff = [{'page': page, **value} for page, value in stuff.items()]
get_user = toolz.curried.get_in(['pr', 'user'])
toolz.groupby(get_user, transformed_stuff)
另一个简单的答案是:

 res = {}
 for page in data:
     user = data[page]["pr"]["user"]
     if user not in res:
        res[user] = [page]
     else:
        res[user].append(page)
 print(res)

您可以迭代页面、检索用户和创建新词典:

注意:如果一个页面下只能存在一个pr,则可以避免第二个for循环。否则,使用如下所示的两个循环

import json

with open("../data/page-data.json") as file:
    data = json.load(file)
output = {}
for page in data:
    for pr in data[page]:
        user = data[page][pr]['user']
        if user not in output:
            output[user] = [page]
        else:
            output[user].append(page)

print(json.dumps(output))
可以使用集合作为默认构造函数

from collections import defaultdict

dd = defaultdict(set)

for page, json_data in data.items():
    user = json_data.get('pr', {}).get('user')
    dd[user] = dd[user].union([page])

>>> dict(dd)
{'A': {'page1', 'page2'}}

您有什么问题?用户是否始终处于json的相同层次结构级别?