Я создаю почтовый «бот» для одной из моих веб-сервисов, которая будет периодически собирать очередь сообщений электронной почты, отправляемых с PHP-скрипта, и отправлять их через SMTP-серверы Google. PHP скрипт возвращает сообщения в этом формате:Создание многоуровневого словаря из строки [Python]
[email protected]:Full Name:shortname\[email protected]:Another Full Name:anothershortname\[email protected]:Foo:bar
мне нужно «преобразовать», что в чем-то вроде этого:
{
"[email protected]": [
[
"Full Name",
"shortname"
],
[
"Foo",
"bar"
]
],
"[email protected]": [
[
"Another Full Name",
"anothershortname"
]
]
}
Извещение мне нужно иметь только один ключ на адрес электронной почты, даже если имеется несколько экземпляров адреса. Я знаю, что могу, возможно, сделать это с помощью двух последовательных циклов, один для создания первого уровня словаря, а второй для его заполнения, но должен быть способ сделать это одним выстрелом. Это мой код до сих пор:
raw = "[email protected]xample.com:Full Name:shortname\[email protected]:Another Full Name:anothershortname\[email protected]: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 и еще не знаком со списками и словарями, поэтому ваша помощь очень ценится!
+1 за усилия. –
Не указанная структура. –
@ IgnacioVazquez-Abrams - Как я уже сказал, я еще не знаком с словарями и списками; это скорее псевдоструктура (я думаю, что это действительно действительный JSON). Только что-то для меня, чтобы визуализировать. –