处理多层嵌套dict为一层,如果key存在于list里,则不处理
时间: 2024-03-27 16:35:23 浏览: 106
接口自动化多层嵌套json数据处理代码实例
好的,那么我们可以在 `flatten_dict` 函数中加入一个参数 `skip_keys`,用于指定不需要处理的键的列表。然后在函数中加入判断,如果键在 `skip_keys` 中,则不处理,直接将键值对存储在新的一层dict中。
以下是修改后的代码:
```python
def flatten_dict(d, parent_key='', sep='_', skip_keys=[]):
items = []
for k, v in d.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, collections.MutableMapping):
items.extend(flatten_dict(v, new_key, sep=sep, skip_keys=skip_keys).items())
elif new_key not in skip_keys:
items.append((new_key, v))
return dict(items)
```
我们在参数中加入了 `skip_keys=[]`,默认为空列表,表示不需要跳过任何键。在处理键值对时,加入了条件语句 `if new_key not in skip_keys`,表示如果当前的键不在 `skip_keys` 中,则将其存储在新的一层dict中。
你可以像下面这样调用这个函数:
```python
d = {
'a': {
'b': 1,
'c': {
'd': 2,
'e': 3
}
}
}
skip_keys = ['b', 'd'] # 不需要处理的键列表
result = flatten_dict(d, skip_keys=skip_keys)
print(result)
```
输出结果为:
```
{'a_c_e': 3}
```
可以看到,只有键 `b` 和 `d` 被跳过了,其他键都被处理成了一层dict。
阅读全文