Tim Chase wrote: > On 2014-02-25 14:40, Skip Montanaro wrote: >> What's the correct result of evaluating this expression? >> >> {'A': 1} | {'A': 2} >> >> I can see (at least) two possible "correct" answers. > > I would propose at least four: > > {'A': 1} # choose the LHS > {'A': 2} # choose the RHS > {'A': (1,2)} # a resulting pair of both > set(['A']) # you did set-ops, so you get a set > > If dicts were to support set ops,
They do in 2.7 and 3.x. > the last one would be my preferred > result. > > I just had to perform set operations on a pair of dicts earlier this > week, shrugged, and did things the manual/explicit way: > > a_dict = dict(...) > b_dict = dict(...) > a_set = set(a_dict) > b_set = set(b_dict) > added_keys = b_set - a_set > removed_keys = a_set - b_set > same_keys = a_set & b_set > diff_keys = a_set ^ b_set > all_keys = a_set | b_set >>> a = dict.fromkeys("ab") >>> b = dict.fromkeys("bc") >>> a.viewkeys() - b.viewkeys() set(['a']) >>> a.viewkeys() & b.viewkeys() set(['b']) >>> a.viewkeys() ^ b.viewkeys() set(['a', 'c']) >>> a.viewkeys() | b.viewkeys() set(['a', 'c', 'b']) For 3.x replace viewkeys() with keys(). > It would save some space if I didn't have to duplicate all the keys > into sets (on the order of 10-100k small strings), instead being able > to directly perform the set-ops on the dicts. But otherwise, it was > pretty readable & straight-forward. > > -tkc -- https://mail.python.org/mailman/listinfo/python-list