我有以下字典:
{
"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'}
这将适用于任何形式的字典