将字典扁平化后包含整数和字符串的列表值转换为字符串



我想将包含整数和字符串的列表值在扁平化后转换为字符串。包含字典的列表应该是扁平的

我有字典:

{
"main_key": [
{
"key1": "val1",
"key2": 0,
"key3": [2,72,140],
"key4": ["val2","val3","val4"]
}
]
}

这篇文章帮助我很好,但它不转换列表值到字符串。我正在使用这个代码:

def flatten(input_dict, separator='/', prefix=''):
output_dict = {}
for key, value in input_dict.items():
if isinstance(value, dict) and value:
deeper = flatten(value, separator, prefix+key+separator)
output_dict.update({key2: val2 for key2, val2 in deeper.items()})
elif isinstance(value, list) and value:
for sublist in value:
if isinstance(sublist, dict) and sublist:
deeper = flatten(sublist, separator, prefix+key+separator)
output_dict.update({key2: val2 for key2, val2 in deeper.items()})
elif isinstance(sublist, list):
output_dict[sublist] = ', '.join([str(ele) for ele in input_dict[sublist]])
else:
output_dict[prefix+key] = value
else:
output_dict[prefix+key] = value
return output_dict

我:

{'main_key/key1': 'val1',
'main_key/key2': 0,
'main_key/key3': [2, 72, 140],
'main_key/key4': ['val2', 'val3', 'val4']}

我希望:

{'main_key/key1': 'val1',
'main_key/key2': 0,
'main_key/key3': '2, 72, 140',
'main_key/key4': 'val2, val3, val4'}

发生这种情况是因为在if isinstance(value, list)块中,您检查value的每个元素的类型,如果这些元素不是列表或字典,则执行:

output_dict[prefix+key] = value

设置输出字典为value,是一个列表。

作为一个hack的修复,执行

output_dict[prefix+key] = ", ".join(str(v) for v in value)

理想情况下,您应该在for sublist in value循环之外执行。我猜你不需要这个循环,而可以只检查第一个元素的类型(如果你假设列表的所有元素都有相同的类型)

最新更新