Project Euler 39: Integer right triangles
You are using a dictionary data = {"most": 0, "num": 0} where you could just as well use local variables. The locals would be more readable and faster.
The built-in max function is convenient when looking for a maximum. You could write find_most_solutions_upto like this:

def find_most_solutions_upto(limit):
    return max(xrange(limit/2, limit + 1), key=find_pythagorean_triples)