Python 从2级嵌套字典中筛选内部键

Python 从2级嵌套字典中筛选内部键,python,Python,我认为这是最优雅的方式: {'i_1': {'a': 33, 't': 4}, 'i_2': {'a': 9, 't': 0}} 由此: {'i_1': {'a': 33, 'b': 55, 't': 4}, 'i_2': {'a': 9, 'b': 11, 't': 0}} 每个内部指令可以有很多a、b、…、z键 现在我有这个:: In [3]: {k:dict(a=d[k]['a'], t=d[k]['t']) for k in d.keys()} Out[3]: {'i_1': {'a

我认为这是最优雅的方式:

{'i_1': {'a': 33, 't': 4}, 'i_2': {'a': 9, 't': 0}}
由此:

{'i_1': {'a': 33, 'b': 55, 't': 4}, 'i_2': {'a': 9, 'b': 11, 't': 0}}
每个内部指令可以有很多a、b、…、z键

现在我有这个::

In [3]: {k:dict(a=d[k]['a'], t=d[k]['t']) for k in d.keys()}
Out[3]: {'i_1': {'a': 33, 't': 4}, 'i_2': {'a': 9, 't': 0}}

但是它不是很优雅,给你。此函数采用指定格式的dict和必须从内部字典中删除的键列表:

import copy

def foo(d):
    d_copy = copy.deepcopy(d)

    for key in d_copy:
        print(key, d[key])
        if isinstance(d[key], dict):
            foo(d[key])
        if key == 'b':
            d.pop(key)
def remove_inner_keys(data: dict, inner_keys_to_remove: list) -> dict:
    result = dict()

    for outer_key in data.keys():
        partial_result = dict()
        for inner_key in data[outer_key]:
            if inner_key not in inner_keys_to_remove:
                partial_result[inner_key] = data[outer_key][inner_key]
        result[outer_key] = partial_result

    return result
测试:

data = { 'i_1': { 'a': 33, 'b': 55, 't': 4 }, 'i_2': { 'a': 9, 'b': 11, 't': 0 } }
print(str(remove_inner_keys(data, ["b"])))
输出:

{'i_2': {'a': 9, 't': 0}, 'i_1': {'a': 33, 't': 4}}

通过使用
项而不是
,可以使代码更具可读性:

{k: dict(a=v['a'], t=v['t']) for k, v in d.items())

所以你想递归地搜索字典并删除所有的
'b'
键?从a~20中选择3个不同的键更重要