добавление нескольких словарей в список и сброс в JSON

Я добавляю несколько словарей в список, а затем конвертирую их в json. Это дает мне несколько списков, каждый из которых добавляет один дополнительный результат. Я хочу отобразить весь вывод в одном массиве списка.

mail_output = []

for i in mail_ids.split():
    result, msg_data = mail.fetch(i, '(RFC822)')

    for each_response in msg_data:
        if isinstance(each_response, tuple):
            msg = email.message_from_string(each_response[1])                  
            items_list = msg.items()
            dict_items = OrderedDict(items_list)       
            email_body = ''
            if msg.is_multipart():
                for part in msg.walk():
                    case...
            dict_items.update({'Body': email_body})
    mail_output.append(dict_items)

    print(json.dumps(mail_output, indent=4, sort_keys=True))

На выходе я получаю:

[
 {
  "Body": "Forwarded.

From: User
  "Subject": "Fw: Tuesday", 
  "To": "<reciever@gmail.com>"
 }
]
[
 {
  "Body": "Forwarded.

From: User
  "Subject": "Fw: Tuesday", 
  "To": "<reciever@gmail.com>"
 },
 {
  "Body": "Urgent Message.

From: Alerts
  "Subject": "Alerts", 
  "To": "<reciever@gmail.com>"
 }
]

Ожидаемый выход:

[
 {
  "Body": "Forwarded.

From: User
  "Subject": "Fw: Tuesday", 
  "To": "<reciever@gmail.com>"
 },
 {
  "Body": "Urgent Message.

From: Alerts
  "Subject": "Alerts", 
  "To": "<reciever@gmail.com>"
 }
 .....
]

Всего 1 ответ


mail_output = []

for i in mail_ids.split():
    result, msg_data = mail.fetch(i, '(RFC822)')

    for each_response in msg_data:
        if isinstance(each_response, tuple):
            msg = email.message_from_string(each_response[1])                  
            items_list = msg.items()
            dict_items = OrderedDict(items_list)       
            email_body = ''
            if msg.is_multipart():
                for part in msg.walk():
                    case...
            dict_items.update({'Body': email_body})
    mail_output.append(dict_items)

print(json.dumps(mail_output, indent=4, sort_keys=True))

У вас просто проблема с отступом ... смотрите последнюю строку здесь ... это единственная часть, которую я изменил. В противном случае скрипт будет печатать для каждой итерации for i in mail_ids.split() .