[英]Extract all keys in nested json data with arbitray depth
我有一個json,它只是一個無序轉儲,它由字典,列表和unicode值的混合嵌套在1到10的深度范圍內組成。這是我正在處理的一個粗略簡化示例:
{'name': 'TheDude',
'age': '19',
'hobbies': {
'love': 'eating',
'hate': 'reading',
'like': [
{'outdoor': {
'teamsport': 'soccer',
}
}
]
}
}
我想要以下輸出(基於上述內容):
[name, age, hobbies_love, hobbies_hate, hobbies_like_outdoor_teamsport]
我嘗試了以下代碼:
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
值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.