
[Raymond Hettinger]
I've been thinking about this and the unabiguous explicit solution is to specify a value argument like dict.get().
dict([(42, 666)]) # current behavior unchanged {42: 666}
dict([(42, 666)], True) {(42, 666): True}
dict( '0123456789abcdef', True) {'a': True, 'c': True, 'b': True, 'e': True, 'd': True, 'f': True, '1': True, '0': True, '3': True, '2': True, '5': True, '4': True, 7': True, '6': True, '9': True, '8': True}
dict('0123456789abcdef') # current behavior unchanged ValueError: dictionary update sequence element #0 has length 1; 2 is required
That's better -- but I'd still rather see a set.
The goal is not to provide full set behavior but to facilitate the common task of building dictionaries with a constant value.
The only dicts with constant values I've ever seen are simulating sets.
It comes up in membership testing and in uniquifying sequences.
Those are indeed two common examples of using dicts to get at set functionality.
The task of dict() is to construct dictionaries and this is a reasonably common construction.
But only because there isn't a set type.