gpt4 book ai didi

python - 使用 python 从嵌套的 json 中提取键值对作为元组

转载 作者:行者123 更新时间:2023-12-05 04:23:52 26 4
gpt4 key购买 nike

我想从 JSON 文件中提取所有键值对,我将其加载为 Python 字典。我在下面创建了这个存储所有值的函数。但是,我正在努力将它们放入列表中以这样存储它们。非常感谢任何支持。


json_example = {'name': 'TheDude',
'age': '19',
'hobbies': {
'love': 'eating',
'hate': 'reading',
'like': [
{'outdoor': {
'teamsport': 'soccer',
}
}
]
}
}


# My code - Extract values

def extract_values(dct, lst=[]):
if not isinstance(dct, (list, dict)):
lst.append(dct)
elif isinstance(dct, list):
for i in dct:
extract_values(i, lst)
elif isinstance(dct, dict):
for v in dct.values():
extract_values(v, lst)
return lst

# Extract keys

def matt_keys(dct):
if not isinstance(dct, (list, dict)):
return ['']
if isinstance(dct, list):
return [dk for i in dct for dk in matt_keys(i)]
return [k+('_'+dk if dk else '') for k, v in dct.items() for dk in matt_keys(v)]




当前输出:

['TheDude', '19', 'eating'...]

期望的输出:

[('name': 'TheDude'), ('age', '19'), ..., ('hobbies_love', 'eating'), ... , ('hobbies_like_outdoor_teamsport', 'soccer')]

此外,如果有更有效或更清洁的方法来提取它,那就太好了。

最佳答案

问题:您的递归函数当前不会将 key 作为函数调用的一部分传递。此外,您还需要在尝试创建 key 时处理嵌套问题。

提示:我们可以将导致特定值的所有键组合成一个列表(例如 ['hobbies', 'love']),然后加入将键转换为单个字符串(例如 hobbies_love)。

解决方案:这是您实现更改后的代码:

def extract_values(dct, lst=[], keys=[]):
if not isinstance(dct, (list, dict)):
lst.append(('_'.join(keys), dct))
elif isinstance(dct, list):
for i in dct:
extract_values(i, lst, keys)
elif isinstance(dct, dict):
for k, v in dct.items():
keys.append(k)
extract_values(v, lst, keys)
keys.remove(k)
return lst


x = extract_values(json_example)
print(x)

输出:以上代码将产生以下所需的输出:

[('name', 'TheDude'), ('age', '19'), ('hobbies_love', 'eating'), ('hobbies_hate', 'reading'), ('hobbies_like_outdoor_teamsport', 'soccer')]

关于python - 使用 python 从嵌套的 json 中提取键值对作为元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73635937/

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