One way is to check the type, however there seems to be varies of other flavor of dictionary also, eg. defaultdict
This is exactly why the idiomatic way to check types is to use isinstance. Since defaultdict is a subclass of dict, isinstance(x, dict) will be true for a defaultdict.
Also, you may want to look at collections.abc (or collections, in 3.2 and earlier) and see if dict is really what you want to check for. If you want to catch any mappings, even things like a blist.sorteddict, you'd check isinstance(x, collections.abc.Mapping). Or, if you want to catch any container at all (including sequences, sets, etc.), collections.abc.Container. Or maybe you want collections.abc.Iterable. You can read the descriptions and decide which one means "not atomic" for your use case.