Python 以任意深度提取嵌套json数据中的所有键
我有一个json,它只不过是一个无序转储,它由dict、list和unicode值的混合体组成,嵌套深度从1到10不等。下面是我正在处理的一个粗略简化的示例:Python 以任意深度提取嵌套json数据中的所有键,python,json,Python,Json,我有一个json,它只不过是一个无序转储,它由dict、list和unicode值的混合体组成,嵌套深度从1到10不等。下面是我正在处理的一个粗略简化的示例: {'name': 'TheDude', 'age': '19', 'hobbies': { 'love': 'eating', 'hate': 'reading', 'like': [ {'outdoor': {
{'name': 'TheDude',
'age': '19',
'hobbies': {
'love': 'eating',
'hate': 'reading',
'like': [
{'outdoor': {
'teamsport': 'soccer',
}
}
]
}
}
我想要以下输出(基于上述内容):
我尝试了以下代码:
def printinoice(dictionary,arr):
for k, v in dictionary.iteritems():
arr.append(k)
if isinstance(v, dict):
for result in printinoice(v,arr):
arr.append(result)
elif isinstance(v, list):
for d in v:
for result in printinoice(d,arr):
arr.append(result)
return arr
基于,但到目前为止没有运气。有人对如何使其工作有好的想法吗?以下递归函数可以工作:
def deep_keys(dct):
if not isinstance(dct, (dict, list)):
return ['']
if isinstance(dct, list):
return [dk for x in dct for dk in deep_keys(x)]
return [k+('_'+dk if dk else '') for k, v in dct.items() for dk in deep_keys(v)]
>>> deep_keys(d)
['name', 'age', 'hobbies_love', 'hobbies_hate', 'hobbies_like_outdoor_teamsport']
最简单的方法是不为函数参数假定给定的类型,这样您就可以将任何嵌套内容(即
list
元素和dict
值)向下传递到递归 以下递归函数将起作用:
def deep_keys(dct):
if not isinstance(dct, (dict, list)):
return ['']
if isinstance(dct, list):
return [dk for x in dct for dk in deep_keys(x)]
return [k+('_'+dk if dk else '') for k, v in dct.items() for dk in deep_keys(v)]
>>> deep_keys(d)
['name', 'age', 'hobbies_love', 'hobbies_hate', 'hobbies_like_outdoor_teamsport']
最简单的方法是不为函数参数假定给定的类型,这样您就可以将任何嵌套内容(即
list
元素和dict
值)向下传递到递归 。。。[key7:{key8:'eight,}]…
不是有效的Python数据结构。此外,请将按键设置为真正的字符串文字,以便有意愿的助手可以复制和粘贴您的示例输入。为清晰起见,修改了问题。。。[key7:{key8:'eight,}]…
不是有效的Python数据结构。此外,请将按键设置为真实的字符串文字,以便有意愿的助手可以复制和粘贴您的示例输入。为清晰起见,修改了问题