Довольно просто:
emails = {
'mgu.edu': ['andrei_serov', 'alexander_pushkin', 'elena_belova', 'kirill_stepanov'],
'gmail.com': ['alena.semyonova', 'ivan.polekhin', 'marina_abrabova'],
'msu.edu': ['sergei.zharkov', 'julia_lyubimova', 'vitaliy.smirnoff'],
'yandex.ru': ['ekaterina_ivanova', 'glebova_nastya'],
'harvard.edu': ['john.doe', 'mark.zuckerberg', 'helen_hunt'],
'mail.ru': ['roman.kolosov', 'ilya_gromov', 'masha.yashkina']
}
addr = map(
lambda k: list(map(lambda name: name + '@' + k, emails[k])),
emails
)
print('\n'.join(sorted(sum(addr, []))))
Даже без functools удалось обойтись. Не думал, что sum может конкатенировать списки :-)
Хотя, свёртка в процессе обработки была бы эффективнее, но зато так записывается короче.
Вывод после запуска:
alena.semyonova@gmail.com
alexander_pushkin@mgu.edu
andrei_serov@mgu.edu
ekaterina_ivanova@yandex.ru
elena_belova@mgu.edu
glebova_nastya@yandex.ru
helen_hunt@harvard.edu
ilya_gromov@mail.ru
ivan.polekhin@gmail.com
john.doe@harvard.edu
julia_lyubimova@msu.edu
kirill_stepanov@mgu.edu
marina_abrabova@gmail.com
mark.zuckerberg@harvard.edu
masha.yashkina@mail.ru
roman.kolosov@mail.ru
sergei.zharkov@msu.edu
vitaliy.smirnoff@msu.edu
emails = {'mgu.edu': ['andrei_serov', 'alexander_pushkin', 'elena_belova', 'kirill_stepanov'],
'gmail.com': ['alena.semyonova', 'ivan.polekhin', 'marina_abrabova'],
'msu.edu': ['sergei.zharkov', 'julia_lyubimova', 'vitaliy.smirnoff'],
'yandex.ru': ['ekaterina_ivanova', 'glebova_nastya'],
'harvard.edu': ['john.doe', 'mark.zuckerberg', 'helen_hunt'],
'mail.ru': ['roman.kolosov', 'ilya_gromov', 'masha.yashkina']}
Нужно дополнить код таким образом, чтобы он вывел все адреса в алфавитном порядке и в формате имя_пользователя@домен.
При решении использовать генератор словарей.