gpt4 book ai didi

python - 如何选择深度嵌套的键 :values from dictionary in python

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:39 27 4
gpt4 key购买 nike

我从网站下载了一个 json 数据,我想从嵌套的 json 中选择特定的键:值。我将 json 转换为 python 字典。然后我使用字典理解来选择嵌套的 key:values ,但是嵌套太多了,我相信有比单独扩展每个字典更好的方法。我在我的方法中看到了冗余。你能建议一个更好的方法吗?

{
"success": true,
"payload": {
"tag": {
"slug": "python",
"name": "Python",
"postCount": 10590,
"virtuals": {
"isFollowing": false
}
},
"metadata": {
"followerCount": 18053,
"postCount": 10590,
"coverImage": {
"id": "1*O3-jbieSsxcQFkrTLp-1zw.gif",
"originalWidth": 550,
"originalHeight": 300
}
}
}
}

我的方法:

从日期时间导入日期时间,timedelta

import json,re

data=r'data.json'
#reads json and converts to dictionary
def js_r(data):
with open(data, encoding='Latin-1') as f_in:
return json.load(f_in)

def find_key(obj, key):
if isinstance(obj, dict):
yield from iter_dict(obj, key, [])
elif isinstance(obj, list):
yield from iter_list(obj, key, [])

def iter_dict(d, key, indices):
for k, v in d.items():
if k == key:
yield indices + [k], v
if isinstance(v, dict):
yield from iter_dict(v, key, indices + [k])
elif isinstance(v, list):
yield from iter_list(v, key, indices + [k])

def iter_list(seq, key, indices):
for k, v in enumerate(seq):
if isinstance(v, dict):
yield from iter_dict(v, key, indices + [k])
elif isinstance(v, list):
yield from iter_list(v, key, indices + [k])
if __name__=="__main__":
my_dict=js_r(data)
print ( "This is dictionary for python tag",my_dict)
keys=my_dict.keys()
print ("This is the dictionary keys",my_dict.keys())
my_payload=list(find_key(my_dict,'title'))
print ("These are my payload",my_payload)
my_post=iter_dict(my_dict,'User','id')
print(list(my_post))

最佳答案

我建议您使用 python-benedict,这是一个可靠的 python dict 子类,具有完整的keypath 支持 和许多实用方法。

它提供多种格式的 IO 支持,包括 json

你可以直接从json文件中初始化它:

from benedict import benedict

d = benedict.from_json('data.json')

现在你的字典有键路径支持:

print(d['payload.metadata.coverImage.id'])

# or use get to avoid a possible KeyError
print(d.get('payload.metadata.coverImage.id'))

安装:pip install python-benedict

这里是库存储库和文档: https://github.com/fabiocaccamo/python-benedict

注:我是这个项目的作者

关于python - 如何选择深度嵌套的键 :values from dictionary in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037281/

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