gpt4 book ai didi

Python 顶级 JSON 索引

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:54 33 4
gpt4 key购买 nike

我从正在调用的 API 中获取了以下 JSON 文件:

{
"14500": [
{
"5": {
"versionName": "VersionOne",
"expand": "executionSummaries",
"name": "Regression",
"projectId": 15006,
"startDate": "",
"executionSummaries": {
"executionSummary": []
}
},
"7": {
"versionName": "VersionOne",
"expand": "executionSummaries",
"versionId": 14500,
"projectId": 15006,
"startDate": "19/Sep/16",
"executionSummaries": {
"executionSummary": []
}
},
"-1": {
"versionName": "VersionOne",
"expand": "executionSummaries",
"name": "Ad hoc",
"modifiedBy": "",
"projectId": 15006,
"startDate": "",
"executionSummaries": {
"executionSummary": []
}
},
"recordsCount": 3
}
],
"14501": [
{
"-1": {
"versionName": "Version 2",
"expand": "executionSummaries",
"projectId": 15006,
"startDate": "",
"executionSummaries": {
"executionSummary": []
}
},
"recordsCount": 1
}
],
}

我需要遍历顶层和下一层(例如“14500”和“5”、“7”等)来查找键和值。例如,我需要搜索整个 JSON 文件以查找与“Regression”匹配的名称,并找到“ProjectID”以及可能的其他字符串的该组数据值。我之前通过使用 data["level1"][0]["level2"] 等来完成此操作,但在这种情况下,数字永远不会相同,所以我不知道如何调用它们。我在浏览了这里的一些帖子后写了以下内容,但它只适用于一个级别,不适用于 JSON 中的下一个级别。

request = requests.get(getCyclesURL, headers=headers)
requestData = json.loads(request.text)
requestDataKeys = requestData.keys

for k in requestDataKeys():
dictionaryIDs = requestData[k]
for m in requestDataKeys:
newDictionaryIDs = requestData[k][m]
for dict in newDictionaryIDs:
if dict['versionName'] == versionName:
versionID = dict['versionID']
print '%s: %s'%(versionName, versionID)

最佳答案

看看惊人的boltons图书馆!它有一个 remap对于您的情况来说,该函数可能有点过大,但了解一下是一件好事。这是从嵌套数据结构中提取所有带有 'name': 'Regression' 的字典的优雅方法:

from boltons.iterutils import remap

# Copy your actual data here
data = {'14500': [{'5': {'name': 'Regression'}, '7': {'name': 'Ad hoc'}}]}

regressions = []

def visit(path, key, value):
if isinstance(value, dict) and value.get('name') == 'Regression':
# You can do whatever you want here!
# If you're here then `value` is a dict
# and its `name` field equals to 'Regression'.
regressions.append(value)
return key, value

remap(data, visit=visit, reraise_visit=False)

assert regressions == [{'name': 'Regression'}]

如果您只需要某个级别的字典,您还可以在visit函数中检查path的长度。

关于Python 顶级 JSON 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39797618/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com