Produce all multiples of a set of primes up to a certain limit
Give variables better names, exponent is better than x.
List comprehensions make your code more understandable.
You can use dictionary.values() to get a list of the values.
You should make this a function. If you can change; limit, and primes.
You're not just getting multiples, you're also getting exponents too. So you may want a better function / variable name.


This can get you:

from collections import defaultdict
from itertools import combinations
from math import log


def prime_multiples(limit, primes):
    res = defaultdict(list)
    res[()] = [1]

    for n in range(1, len(primes) + 1):
        for combo in combinations(primes, n):
            base = combo[-1]
            res[combo] = [
                multiple * base**exponent
                for multiple in res[combo[:-1]]
                for exponent in range(1, int(log(limit / multiple, base)) + 1)
            ]

    multiples = [i for val in key.values() for i in val]
    multiples.sort()
    return multiples


print(prime_multiples(10**13, [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47]))


It's 5AM, and I've not tested the following in anyway.
But you could probably change the code to use the modulo operator, %.
To check if the number is devisable.
And so if you write a generator function, you may be able to use:

def prime_multiples(limit, primes):
    yield 1
    for num in range(1, limit):
        if any(num % prime == 0 for prime in primes):
            yield num