首页 > 解决方案 > 删除特定键但不删除 value(list) ,因此它成为上键的元素

问题描述

不知道能不能用标题表达自己

示例字典:

dict_x = {"key1": "value1", "key2": [{"key3": "value3"}, {"key4": [{"key5": "value5"}, {"key6": 
"value6"}]}]}

编辑:认为你有很多这样的嵌套字典。你必须循环。
Edit2:我们需要一种递归方法来处理大量嵌套的字典
,我想得到什么作为输出:

{"key1": "value1", "key2": [{"key3": "value3"}, {"key5": "value5"}, {"key6": "value6"}]}

所以删除 key4 但保留值并将其作为值传递给上键。

我通过 stackoverflow 进行了搜索,但给出的唯一解决方案是展平 dict 或删除具有它们所持有的值的键。我想删除一个键,但我不想丢失它的值。

标签: pythonpython-3.xdictionary

解决方案


这是使用字典理解的通用解决方案:

from itertools import chain
{k1: list(chain(*(list(d.values())[0] if all(map(lambda x: isinstance(x, list), d.values())) else [d]
      for d in v1)))
     if isinstance(v1, list) else v1
 for k1,v1 in dict_x.items()}

以及使用经典循环的解决方案:

out = {}
for k,v in dict_x.items():
    if isinstance(v, list):
        l = []
        for elem in v:
            if all(map(lambda x: isinstance(x, list), elem.values())):
                l.extend([i for sub in elem.values() for i in sub])
            else:
                l.append(elem)
        out[k] = l
    else:
        out[k] = v

输出:

{'key1': 'value1',
 'key2': [{'key3': 'value3'}, {'key5': 'value5'}, {'key6': 'value6'}]}

推荐阅读