Я создаю почтового «бота» для одного из моих веб-сервисов, который будет периодически собирать очередь сообщений электронной почты, которые будут отправлены из сценария PHP, и отправлять их через SMTP-серверы Google. Скрипт PHP возвращает сообщения в следующем формате:
test@example.com:Full Name:shortname\ntest2@example.com:Another Full Name:anothershortname\ntest@example.com:Foo:bar
Мне нужно «преобразовать» что-то вроде этого:
{
"test@example.com": [
[
"Full Name",
"shortname"
],
[
"Foo",
"bar"
]
],
"test2@example.com": [
[
"Another Full Name",
"anothershortname"
]
]
}
Обратите внимание: мне нужно иметь только один ключ для электронной почты, даже если есть несколько экземпляров адреса. Я знаю, что, вероятно, я могу сделать это с двумя последовательными циклами, один для создания первого уровня словаря и второй для его заполнения, но должен быть способ сделать это за один раз. Это мой код:
raw = "test@example.com:Full Name:shortname\ntest2@example.com:Another Full Name:anothershortname\ntest@example.com:Foo:bar"
print raw
newlines = raw.split("\n")
print newlines
merged = {}
for message in newlines:
message = message.split(":")
merged[message[0]].append([message[1], message[2]])
print merged
Я получаю сообщение об ошибке KeyError в последней строке цикла, которое, как я понимаю, означает, что ключ должен существовать до добавления чего-либо к нему (добавление к несуществующему ключу не создаст этот ключ).
Я новичок в Python и пока не очень знаком со списками и словарями, поэтому ваша помощь очень ценится!