获取具有嵌套字典中所有键的已保存结构的字典

时间:2020-05-08 14:10:27

标签: python python-3.x

我想获得一个可能的结构,其中包含数据库中单个字段的所有可能的键,该键以JSON(dict)格式存储。我的任务中的结构非常重要,因此不适合将其存储在列表中。嵌套的级别可以超过两个。

此示例:

dicts = {'a':1, 'b':2, 'c':{'in_c1': 2}}, \
        {'a':1, 'd':2, 'c':{'dict_in_c2': {'v': 2}}},\
        {'e':57}

应返回:

{'a': 1, 'b':2, 'c': {'in_c1': 2, 'dict_in_c2': {'v': 2}}, 'd': 2, 'e': 57}

文本(键的值)对我而言并不重要,最好将其替换为诸如none或空字符串之类的东西。 我该怎么做?

1 个答案:

答案 0 :(得分:1)

这可能无法处理所有情况,但涵盖了一些基本情况。 我假设

    具有整数值(例如ab)的
  • 键将没有任何字典值。

  • 具有字典作为值的
  • 键(例如c)将没有任何非字典值。同样,仅在第一级对字典的键执行了展平,而在嵌套级上未执行。

这是代码:

dicts = {'a':1, 'b':2, 'c':{'in_c1': 2}}, \
        {'a':1, 'd':2, 'c':{'dict_in_c2': {'v': 2}}},\
        {'e':57}
result = dict()
for dictionary in dicts:
    for key, value in dictionary.items():
        if not isinstance(value,dict):
            result[key] = value
            continue
        if not result.get(key, None):
            result[key] = dict()
        for k, v in value.items():
            result[key][k] = v

print(result)

结果- {'b': 2, 'a': 1, 'c': {'dict_in_c2': {'v': 2}, 'in_c1': 2}, 'e': 57, 'd': 2}