On 2018-07-03 23:20, Greg Ewing wrote:
Nicolas Rolin wrote:

grouping(((len(word), word) for word in words))

That actually has one more level of parens than are needed,
you can just write

     grouping((len(word), word) for word in words)

FWIW, here's my opinion.

I much prefer something like:

    grouped(words, key=len)

I think that building an iterable of 2-tuples to pass to 'grouped' is much like following a decorate-sort-undecorate pattern when sorting, or something similar when using 'min' or 'max'. Passing an iterable of items and optionally a key function is simpler, IMHO.

Why would you pass 2-tuples, anyway?

Maybe it's because 'grouped' returns a dict and a dict can be built from an iterable of 2-tuples, but that's OK because a dict needs key/value pairs.

When 'Counter' was being proposed, it was suggested that one could be created from an iterable of 2-tuples, which sort of made sense because a Counter is like a dict, but, then, how would you count 2-tuples?

Fortunately, Counter counts items, so you can do things like:

    counts = Counter(list_of_words)

I think it's the same thing here.

'grouped' returns a dict, so passing 2-tuples initially seems reasonable, but, as in the case with Counter, I think it would be a mistake.

It would be nice to be able to say:

    grouped(words, key=str.casefold)

rather than:

    grouped((word.casefold(), word) for word in words)

It would match the pattern of sorted, min and max.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to