Guidoだったら、素直にこう書け、と言いそうだが。

def trans_macro(text):
    spam_macros = [('egg', 'egg and spam'),
                   ('spam', 'spam with bacon'),
                   ('ham', 'ham and spam and egg')]
    for i in spam_macros:
        text = text.replace(i[0], i[1])

    return text