繁体   English   中英

将嵌套字典转换为键值

[英]Transform nested dict into key value

我有一个复杂的字典,像这样:

d = {
  "key1": "value1",
  "key2": {
    "key3": "value3",
    "key4": {
      "key5": "value5",
      "key6": [{"keys1": "value_keys1"}]
    }
}

我想打开一个简单的键值

{
  "key1": "value1",
  "key2_key3": "value3",
  "key2_key4_key5": "value5",
  "key2_key4_key6_0_keys1": "value_keys1",

}

我怎么能在python上做到这一点?

我试过这个:

def flat_dict_helper(prepend, d):
    if len(prepend) > 0:
        prepend = prepend + "_"
    for k in d:
        i = d[k]
        if isinstance(i, dict):
            r = flat_dict_helper(prepend + k, i)
            for j in r:
                yield j
        else:
            yield (prepend + k, i)


def flat_dict(d):
    return dict(flat_dict_helper("", d))

但这在某些情况下不起作用,例如当里面有一个列表时

您必须在列表的情况下指定行为:

def flat_dict_helper(prepend, d):
    prepend += "_" if len(prepend) else prepend
    for k in d:
        i = d[k]
        if isinstance(i, dict):
            r = flat_dict_helper(prepend + k, i)
            for j in r:
                yield j
        elif isinstance(i, list):
            for idx, element in enumerate(i):
                r = flat_dict_helper('{}{}_{}'.format(prepend, k, idx), element)
                for j in r:
                    yield j
        else:
            yield (prepend + k, i)



def flat_dict(d):
    return dict(flat_dict_helper("", d))

>>> flat_dict(d)
{'key1': 'value1', 'key2_key3': 'value3', 'key2_key4_key5': 'value5', 'key2_key4_key6_0_keys1': 'value_keys1'}


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM