您可以使用递归生成器执行以下操作:
keys = ("name", "size", "mountpoint")
def traverse(objs):
for obj in objs:
yield {k: obj[k] for k in keys}
yield from traverse(obj.get("children", []))
list(traverse(data["blockdevices"]))
[{'mountpoint': None, 'name': 'sda', 'size': '931,5G'},
{'mountpoint': None, 'name': 'sda1', 'size': '18,6G'},
{'mountpoint': '/', 'name': 'md0', 'size': '18,6G'},
{'mountpoint': None, 'name': 'sda2', 'size': '1K'},
{'mountpoint': None, 'name': 'sda5', 'size': '9,3G'},
{'mountpoint': '[SWAP]', 'name': 'md1', 'size': '9,3G'},
{'mountpoint': None, 'name': 'sda6', 'size': '18,6G'},
{'mountpoint': '/home', 'name': 'md2', 'size': '18,6G'},
{'mountpoint': None, 'name': 'sda7', 'size': '885G'},
{'mountpoint': '/var', 'name': 'md3', 'size': '884,8G'},
{'mountpoint': None, 'name': 'sdb', 'size': '931,5G'},
{'mountpoint': None, 'name': 'sdb1', 'size': '18,6G'},
{'mountpoint': '/', 'name': 'md0', 'size': '18,6G'},
{'mountpoint': None, 'name': 'sdb2', 'size': '1K'},
{'mountpoint': None, 'name': 'sdb5', 'size': '9,3G'},
{'mountpoint': '[SWAP]', 'name': 'md1', 'size': '9,3G'},
{'mountpoint': None, 'name': 'sdb6', 'size': '18,6G'},
{'mountpoint': '/home', 'name': 'md2', 'size': '18,6G'},
{'mountpoint': None, 'name': 'sdb7', 'size': '885G'},
{'mountpoint': '/var', 'name': 'md3', 'size': '884,8G'},
{'mountpoint': None, 'name': 'sdc', 'size': '5,5T'},
{'mountpoint': None, 'name': 'sdc1', 'size': '5,5T'},
{'mountpoint': '/mnt/data', 'name': 'DATA', 'size': '5,5T'},
{'mountpoint': None, 'name': 'sdd', 'size': '3,7T'},
{'mountpoint': None, 'name': 'sdd1', 'size': '3,7T'},
{'mountpoint': '/mnt/data2', 'name': 'DATA2', 'size': '3,7T'},
{'mountpoint': None, 'name': 'sde', 'size': '9,1T'},
{'mountpoint': None, 'name': 'sde1', 'size': '9,1T'}]