Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:
FWIW, here's a recipe from the itertools docs: def partition(pred, iterable): "Use a predicate to partition entries into false entries and true entries" # partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 t1, t2 = tee(iterable) return filterfalse(pred, t1), filter(pred, t2) Also, here's a more general solution that can handle multiple categories: >>> from collections import defaultdict >>> def categorize(func, iterable): d = defaultdict(list) for x in iterable: d[func(x)].append(x) return dict(d) >>> categorize(is_positive, [-3, -2, -1, 0, 1, 2, 3]) {False: [-3, -2, -1, 0], True: [1, 2, 3]} >>> categorize(lambda x: x%3, [-3, -2, -1, 0, 1, 2, 3]) {0: [-3, 0, 3], 1: [-2, 1], 2: [-1, 2]} At one point, Peter Norvig suggested adding a groupby classmethod to dictionaries. I would support that idea. Something like: dict.groupby(attrgetter('country'), conferences) ---------- nosy: +rhettinger _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43899> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com