[英]Transform nested dict into key value
I have a complex dict, something like this:我有一个复杂的字典,像这样:
d = {
"key1": "value1",
"key2": {
"key3": "value3",
"key4": {
"key5": "value5",
"key6": [{"keys1": "value_keys1"}]
}
}
And I want to turn it on a simple key value我想打开一个简单的键值
{
"key1": "value1",
"key2_key3": "value3",
"key2_key4_key5": "value5",
"key2_key4_key6_0_keys1": "value_keys1",
}
How can I do this on python?我怎么能在python上做到这一点?
I tried this:我试过这个:
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))
But this wont work on some cases, when there is a list inside for example但这在某些情况下不起作用,例如当里面有一个列表时
You have to specify the behavior in the case of list:您必须在列表的情况下指定行为:
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.