Combining a list of realtime responses with a list of static responses
You are constructing a list out of realtimeResponses.

You then iterate over each item in staticResponses, and for each static response, you (slowly) look to see if that key is in your list of realtimeResponses.

Right there is your room for improvement: a list is not the professional data structure of choice for testing if an item is in a collection. For that, you want either a set or a dict.

In your case, you have extra data in your realtimeResponses, but you don't use it. So set seems to be the right choice: put your realtimeResponses key values into a set, and then you can just use code like:

    realKeys = {rtr['key'] for rtr in realtimeResponses}

    for response in staticResponses:
        if response['key'] in realKeys:
            predictionArray.append(response)


Of course, once you have a for and an if in a tight loop, you can replace it with a list comprehension:

predictionArray += [resp for resp in staticResponses if resp['key'] in realKeys]