Project Euler # 30 Digits fifth power in Python
Your comprehensions are hard to understand, as you have two on one line. I recomend you spread them over multiple lines to increase readability.
There is no benifit to using a dictionary comprehension, and only makes me think you're abusing comprehensions.

Just use a normal for loop and use yield.
You don't need to pass n, you can find the limit by using power * 9**power.
This causes the program to run in a quarter of the time.


def powers(power):
    for number in range(2, power * 9**power):
        total = sum(int(digit) ** power for digit in str(number))
        if total == number:
            yield number


If you change from using range to just digits and checking that the total is an anagram of the input then you can get the code to run in ~5% the time of the previous code.

def powers(power):
    for size in range(1, len(str(power * 9**power)) + 1):
        for digits in itertools.combinations_with_replacement(range(10), size):
            total = sum(int(digit) ** power for digit in digits)
            if (sorted(str(total)) == sorted(str(digit) for digit in digits)
                and total != 1
            ):
                yield total