Assuming that your dictionary contains a key 'TagList' and you are only interested in the dictionaries in the list associated with that key, you can use:
any(subd.get('Key') == 'tag1' for subd in the_dict['TagList'])
Where the dictionary the_dict is the one you want to inspect.
We thus use the any(..) builtin with a generator expression that iterates through the list associated with the 'TagList' key. For each such subdictionary, we check if the key 'Key' is associated with the value 'tag1'. In case no key 'Key' is present in one or more of the subdictionaries, that is not a problem since we use .get(..).
For your given dictionary, this generates:
>>> any(subd.get('Key') == 'tag1' for subd in the_dict['TagList'])
True
Multiple values
If you want to check that all values of a list occur in the subdictionaries, we can use the following two-liner (given the "tag names" are hashable, strings are hashable):
tag_names = {subd.get('Key') for subd in the_dict['TagList']}
all(tag in tag_names for tag in ('tag1','tag2'))
Here the all(..) will return True if all the tag names in the tuple at the right (('tag1','tag2')) are each in at least one subdictionary.
For example:
>>> all(tag in tag_names for tag in ('tag1','tag2'))
True
>>> all(tag in tag_names for tag in ('tag1','tag2','tag3'))
True
>>> all(tag in tag_names for tag in ('tag1','tag2','tag4'))
False
'TagList'in your dict?