indeed -- and that is pretty darn baked in to Python, so I don't think it's going to change.
Except this convention doesn't hold for dict.setvalue (which I did misspell, sorry), or for dict.pop. Both these methods fundamentally mutate the collection, but they also return a value (which could be retrieved by a non-mutating method), that somewhat pertains to the operation performed.
Note: I"n not sure your example with setdefault is correct:
Fair enough, I misspelled setdefault and messed up the example, what I meant was:
seen = {}
for k, v in iterable_of_tuples:
if seen.setdefault(k,v) is not v:
... # duplicate key
else:
... # new key