使用 python 通过深层嵌套字典中的特定键获取所有值
get all values by a specific key in a deep nested dict using python
{
"id": 1,
"name": "Test",
"fils": [
{"id": 2, "name": "Test", "fils": []},
{"id": 4, "name": "Test", "fils": []},
{
"id": 5,
"name": "Test",
"fils": [
{
"id": 12,
"name": "Test",
"fils": [{"id": 14, "name": "test", "fils": []}],
}
],
},
],
}
所以我的目标是获取所有 [1,2,4,5,12,14] 的 ID。
有什么方法可以使用递归函数或其他方式得到它吗?
你可以使用递归。如果 dct
是问题中的字典,则:
def get_ids(d):
if isinstance(d, dict):
for k, v in d.items():
if k == "id":
yield v
else:
yield from get_ids(v)
elif isinstance(d, list):
for v in d:
yield from get_ids(v)
ids = list(get_ids(dct))
print(ids)
打印:
[1, 2, 4, 5, 12, 14]
{
"id": 1,
"name": "Test",
"fils": [
{"id": 2, "name": "Test", "fils": []},
{"id": 4, "name": "Test", "fils": []},
{
"id": 5,
"name": "Test",
"fils": [
{
"id": 12,
"name": "Test",
"fils": [{"id": 14, "name": "test", "fils": []}],
}
],
},
],
}
所以我的目标是获取所有 [1,2,4,5,12,14] 的 ID。 有什么方法可以使用递归函数或其他方式得到它吗?
你可以使用递归。如果 dct
是问题中的字典,则:
def get_ids(d):
if isinstance(d, dict):
for k, v in d.items():
if k == "id":
yield v
else:
yield from get_ids(v)
elif isinstance(d, list):
for v in d:
yield from get_ids(v)
ids = list(get_ids(dct))
print(ids)
打印:
[1, 2, 4, 5, 12, 14]