Set a value in a dict only if the value is not already set

dict.setdefault will precisely "set a value in a dict only if the value is not already set".

You still need to compute the value to pass it in as the parameter:

connection_settings.setdefault("timeout", compute_default_timeout(connection_settings))

One way to do this is:

if key not in dict:
  dict[key] = value

This is a bit of a non-answer, but I would say the most pythonic is the if statement as you have it. You resisted the urge to one-liner it with __setitem__ or other methods. You've avoided possible bugs in the logic due to existing-but-falsey values which might happen when trying to be clever with short-circuiting and/or hacks. It's immediately obvious that the compute function isn't used when it wasn't necessary.

It's clear, concise, and readable - pythonic.