With Python 3.6+, since it maintains insertion order, you can do this using .fromkeys()
and .update()
:
di = dict.fromkeys(t1, False)
di.update(dict.fromkeys(t2, True))
# di = {'abc': False, 'def': True, 'ghi': False, 'jkl': True}
>>> tuple(di.values())
(False, True, False, True)
Which can be shortened to:
results=tuple({ **{}.fromkeys(t1, False), **{}.fromkeys(t2, True) }.values())
Or, with Python 3.9+:
result=tuple(({}.fromkeys(t1, False) | {}.fromkeys(t2, True)).values())
If you want to make sure that a value in t2
is not inserted into result as True
without a corresponding value in t1
, just have a set
to determine the overlapping elements:
result=tuple(({}.fromkeys(t1, False) | {}.fromkeys(set(t1)&set(t2), True)).values())
This method is potentially faster for larger sequences since in
can be slower for long sequences.