Generate Letter Combinations of a Phone Number
You can set the keypad lookup as a constant instead of computing it dynamically. Setting it up as constant makes it clearer that what your intent is.

KEYPAD = {
    '2': 'abc',
    '3': 'def',
    '4': 'ghi',
    '5': 'jkl',
    '6': 'mno',
    '7': 'pqrs',
    '8': 'tuv',
    '9': 'wxyz'}




itertools.product can accept multiple lists. And in python, you can use * to unpack an iterable into positional arguments, and ** to unpack as keyword arguments.

To sum up:

def t9_mode(numbers):
    if len(numbers) == 1:
        return KEYPAD[numbers[0]]
    maps = map(KEYPAD.get, numbers)
    return [''.join(_) for _ in itertools.product(*maps)]


does the job.