python flatten字典,在flatten后留下相同的键名



我有以下字典:


{
"a": "b",
"c": {'d':'e', 'g':'f'}
}

和我想使字典变平,但是用这种方式:

{
"a": "b",
'd':'e',
'g':'f'
}

可以假设没有重复的键。

我读了flatten_dict库,但它看起来没有支持。

我该怎么做?谢谢你!

对于一级嵌套,一个漂亮的循环可以达到目的:

result = {}
for key, value in my_dict.items():
if isinstance(value, dict):
result.update(value)  # add subdict directly into the dict
else:
result[key] = value  # non-subdict elements are just copied

如果你有更多的嵌套,If/else应该递归地执行:

def flatten(my_dict):
result = {}
for key, value in my_dict.items():
if isinstance(value, dict):
result.update(flatten(value))
else:
result[key] = value 
return result

你可以使用这个答案的修改版本:

from collections.abc import MutableMapping
def flatten(d):
items = []
for k, v in d.items():
if isinstance(v, MutableMapping):
items.extend(flatten(v).items())
else:
items.append((k, v))
return dict(items)
>>> x = {
...     "a": "b",
...     "c": {'d': 'e', 'g': 'f'}
... }
>>> flatten(x)
{'a': 'b', 'd': 'e', 'g': 'f'}

这将适用于任何形式的字典

相关内容

  • 没有找到相关文章

最新更新