Python 从json中提取密钥
我正在python框架中创建score web应用程序。因此,我有一个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",
{
"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的相同层次结构级别?