我在Python中有一个数据结构,可以有无限的嵌套字典和列表,这是一个模型:
payload={
"mimeType":"multipart",
"parts":[
{
"mimeType":"multipart",
"parts":[
{
"mimeType":"multipart",
"parts":[
{
"mimeType":"text",
"body":"ACTUAL CONTENT"
}
]
},
{
"mimeType":"text",
"body":"ACTUAL CONTENT"
}
]
},
{
"mimeType":"text",
"body":"ACTUAL CONTENT"
}
]
}
如果您有兴趣,这是Gmail API(简化版)提供的电子邮件。
目的是创建一个包含mimeType =“ text”的每个部分的列表,该列表可以包含在任意数量的带有mimeType =“ multipart”的部分中。
预期结果:
[
{
mimeType: "text"
body: "ACTUAL CONTENT"
},
{
mimeType: "text"
body: "ACTUAL CONTENT"
},
...
]
我已经通过使用无限循环并通过中断来控制它来达成一个解决方案:
i = 0
while True:
try:
if payload["parts"][i]["mimeType"] == "multipart":
# Add nested parts to the main payload
payload["parts"].append(payload["parts"][i]["parts"])
# Remove this part from main payload
message["payload"]["parts"].pop(i)
i = i + 1
except IndexError:
break
但我认为应该有Python或更合理的方法。
确实,递归是关键。如果我们有文字,那么只需将整个内容作为一个元素返回即可;如果我们有一个多部分,则将其各部分的所有文本位加起来。
def find_text_bits(payload):
if payload['mimeType'] == 'multipart':
return [part_text
for part in payload['parts']
for part_text in find_text_bits(part)]
elif payload['mimeType'] == 'text':
return [payload]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句