From 20b39e71e5560fba063725852281c147c1c04a7d Mon Sep 17 00:00:00 2001 From: Mahmoud Hashemi Date: Wed, 20 Feb 2013 01:23:32 -0800 Subject: [PATCH] a couple iterutils changes --- boltons/iterutils.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/boltons/iterutils.py b/boltons/iterutils.py index 01e1e22..193eacb 100644 --- a/boltons/iterutils.py +++ b/boltons/iterutils.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from compat import basestring def is_iterable(obj): @@ -15,7 +16,7 @@ def is_scalar(obj): def split(src, sep=None, maxsplit=None): """ - Splits an iterable based on a separator. + Splits an iterable based on a separator. Returns a list of lists. >>> split(['hi', 'hello', None, None, 'sup', None, 'soap', None]) [['hi', 'hello'], ['sup'], ['soap']] @@ -160,7 +161,7 @@ def chunked_iter(src, size, **kw): def bucketize(src, keyfunc=None): """ - Group values in 'src' iterable by value returned by keyfunc. + Group values in 'src' iterable by value returned by 'keyfunc'. keyfunc defaults to bool, which will group the values by truthiness; at most there will be two keys, True and False, and each key will have a list with at least one item. @@ -195,6 +196,13 @@ def bucketize_bool(src, keyfunc=None): Like bucketize, but for added convenience returns a tuple of (truthy_values, falsy_values). + >>> nonempty, empty = bucketize_bool([[], [], [], ['hi']]) + >>> nonempty + ['hi'] + + keyfunc defaults to bool, but can be carefully overridden to + use any function that returns either True or False. + >>> import string >>> is_vowel = lambda x: x.lower() in 'aeiou' >>> vowels, consonants = bucketize_bool(string.letters, is_vowel)