将项目分组到存储桶的简单方法

问题描述

但据我所知,没有什么标准库。虽然我很惊讶,几个星期在之前accumulate,所以谁知道这些天潜伏在哪里?:^)

当我需要这种行为时,我会使用

from collections import defaultdict

def partition(seq, key):
    d = defaultdict(list)
    for x in seq:
        d[key(x)].append(x)
    return d

并继续我的一天。

解决方法

我经常想在python中存储无序集合。itertools.groubpy做正确的事情,但几乎总是需要按摩以首先对项目进行排序并在迭代器被使用之前捕获它们。

是否可以通过标准python模块或简单的python习惯用法来获得此行为的快速方法?

>>> bucket('thequickbrownfoxjumpsoverthelazydog',lambda x: x in 'aeiou')
{False: ['t','h','q','c','k','b','r','w','n','f','x','j','m','p','s','v','t','l','z','y','d','g'],True: ['e','u','i','o','e','a','o']}
>>> bucket(xrange(21),lambda x: x % 10)
{0: [0,10,20],1: [1,11],2: [2,12],3: [3,13],4: [4,14],5: [5,15],6: [6,16],7: [7,17],8: [8,18],9: [9,19]}