How can I make handling multiple {}.get('value', {}.get('foo')) pretty?
Your code attempts to fetch the values of all keys when it probably only really needs one.  You do not want to be doing this.

I think it would be better to create a list representing the priorities of what values you wish to retrieve and attempt to retrieve them.

def get_value(priorities):
    for key, dictionary in priorities:
        try:
            return dictionary[key]
        except KeyError:
            pass
    return None

priorities = [
    ('foo', dictionary1),
    ('bar', dictionary1),
    ('baz', dictionary2),
]
foo = get_value(priorities)