This seems to be a theme, that dict lookups are the most common “unknown state” operations by far: the same objection is being raised for adding a get to Sequences, namely that it is just not common enough to be worth adding. Generally the idiom for sequences seems to be either LBYL (check the length!) or iteration.
One other case that I’ve come across is optional dicts, where it’s sometimes cleaner to treat it as a dict and catch the error if it was actually a None. I don’t know if that’s peculiar to our company though?
The only other case I can think of is accessing JSON where you don’t know the type for sure but you’re happy to EAFP and catch the TypeErrors, but I think JSON is normally typed as Any so this wouldn’t be relevant.
I hope we come down on the side of allowing idiomatic EAFP for dicts. Accessing nested dicts with get is quite ugly:
foo.get("bar", {}).get("baz", {})....
If those values can be None, it’s even worse:
...((foo.get("bar") or {}).get("baz") or {})....