<p>可以使用递归生成器函数:</p>
<pre><code>import itertools as it
log = {'hKtN': {'edit_field': ['id', 'coord'], 'ids': {'4A': {'update_type': 'delete'}, '1A': {'update_type': '', 'update_detail': []}, '2A': {'update_type': 'edit', 'update_detail': ['0913', '0914']}}}}
def flatten(d, c = [], k = 'logId'):
a, b, m = [*c], [], []
for x, y in d.items():
if k in ['logId', 'ids']:
m.append((k, x))
if not isinstance(y, dict):
a.append((x, y))
else:
b.append((x, y))
if not b:
yield from ([a] if not m else [[*a, j] for j in m])
else:
yield from [i for (x, y), j in it.zip_longest(b, m)
for i in flatten(y, c = a if j is None else [*a, j], k = x)]
tbl = [dict(i) for i in flatten(log)]
print(tbl)
</code></pre>
<p>输出:</p>
<pre><code>[{'logId': 'hKtN', 'edit_field': ['id', 'coord'], 'ids': '4A', 'update_type': 'delete'}, {'logId': 'hKtN', 'edit_field': ['id', 'coord'], 'ids': '1A', 'update_type': '', 'update_detail': []}, {'logId': 'hKtN', 'edit_field': ['id', 'coord'], 'ids': '2A', 'update_type': 'edit', 'update_detail': ['0913', '0914']}]
</code></pre>