<p>下面是第一级嵌套转换的解决方案</p>
<pre><code>import json
input_list = [{'item1':"value",'item2':[{'tinyitem21':'tinyvalue21','tinyitem22':'tinyvalue22'}]},{'item3':[{'tinyitem31':'tinyvalue31','tinyitem32':'tinyvalue32'}],'item4':'value4'}]
for index, j in enumerate(range(len(input_list))):
for key, value in input_list[index].items():
if isinstance(value, list) and len(value) == 1: # Checking for single dictionary as multiple values of dict cannot considered as json
input_list[index][key] = value[0]
print(json.dumps(input_list, indent=3))
</code></pre>
<p>输出:</p>
<pre><code>[
{
"item1": "value",
"item2": {
"tinyitem21": "tinyvalue21",
"tinyitem22": "tinyvalue22"
}
},
{
"item3": {
"tinyitem31": "tinyvalue31",
"tinyitem32": "tinyvalue32"
},
"item4": "value4"
}
]
</code></pre>
<p>假设索引0处<strong><code>item2</code>的值有多个dict</strong>,则应将其视为字符串值,如下面的输出所示</p>
<pre><code>import json
input_list = [{'item1':"value",'item2':[{'tinyitem21':'tinyvalue21','tinyitem22':'tinyvalue22'},{'tinyitem23':'tinyvalue21','tinyitem24':'tinyvalue22'}]},{'item3':[{'tinyitem31':'tinyvalue31','tinyitem32':'tinyvalue32'}],'item4':'value4'}]
for index, j in enumerate(range(len(input_list))):
for key, value in input_list[index].items():
if isinstance(value, list): # without checking len of list
input_list[index][key] = ','.join(map(str, value)) # string value be assigned instead of dictionary
print(json.dumps(input_list, indent=3))
</code></pre>
<p>输出将是string而不是dict,但如果您注意到<code>item3</code>是list的单个dict,但仍然被分配为str</p>
<pre><code>[
{
"item1": "value",
"item2": "{'tinyitem21': 'tinyvalue21', 'tinyitem22': 'tinyvalue22'},{'tinyitem23': 'tinyvalue21', 'tinyitem24': 'tinyvalue22'}"
},
{
"item3": "{'tinyitem31': 'tinyvalue31', 'tinyitem32': 'tinyvalue32'}",
"item4": "value4"
}
]
</code></pre>
<p>使用一个/多个dict处理两个列表,具有更高的可读性</p>
<pre><code>for index, j in enumerate(range(len(input_list))):
for key, value in input_list[index].items():
if isinstance(value, list) and len(value) == 1: # Checking for single dictionary as multiple values of dict cannot considered as json
input_list[index][key] = value[0]
if isinstance(value, list) and len(value) > 1: # for list of dict with more than one
input_list[index][key] = ','.join(map(str, value)) # string value be assigned instead of dictionary
</code></pre>
<p><strong>如果您想使用CDJB提到的综合方法,您需要在其中添加一个条件,因为如果列表大小大于1,它将自动忽略第二个索引</p>
<pre><code>[{k: v[0] if isinstance(v, list) and len(v) == 1 else v for k, v in d.items()} for d in input_list]
</code></pre>
<p>输出:</p>
<pre><code>[
{
"item1": "value",
"item2": "{'tinyitem21': 'tinyvalue21', 'tinyitem22': 'tinyvalue22'},{'tinyitem23': 'tinyvalue21', 'tinyitem24': 'tinyvalue22'}"
},
{
"item3": {
"tinyitem31": "tinyvalue31",
"tinyitem32": "tinyvalue32"
},
"item4": "value4"
}
]
</code></pre>