按共享属性的值对序列中的项进行分组。
group-by-attr的Python项目详细描述
按共享属性的值对序列中的项进行分组。
group_by_attr(attr,items)
安装:
$ pip install group-by-attr
示例
假设您想将一些“struct”实例组合在一起。
>>>frompprintimportpprint>>>fromcollectionsimportnamedtuple>>>Struct=namedtuple('Struct',('x','y','z'))>>>a,b,c=(...Struct(x=1,y=1,z=1),...Struct(x=1,y=2,z=2),...Struct(x=1,y=1,z=3))
如果我们要按“x”属性对这些实例进行分组,我们应该 期望一组包含所有三项:
>>>pprint(group_by_attr(attr='x',items=(a,b,c))){1:(Struct(x=1,y=1,z=1),Struct(x=1,y=2,z=2),Struct(x=1,y=1,z=3))}
相反,如果我们按“y”分组,我们应该期待一个不同的 分组:
>>>pprint(group_by_attr(attr='y',items=(a,b,c))){1:(Struct(x=1,y=1,z=1),Struct(x=1,y=1,z=3)),2:(Struct(x=1,y=2,z=2),)}
最后,按“z”分组将产生三个单独的组:
>>>pprint(group_by_attr(attr='z',items=(a,b,c))){1:(Struct(x=1,y=1,z=1),),2:(Struct(x=1,y=2,z=2),),3:(Struct(x=1,y=1,z=3),)}
此函数还可以使用备用getattr,只要它实现 相同的接口(以项和属性名作为参数)。 例如,可以对词典进行分组:
>>>pprint(group_by_attr(...attr='x',...items=(...{'x':1,'y':'a'},...{'x':2,'y':'b'},...{'x':1,'y':'c'}),...getattr_fn=dict.__getitem__)){1:({'x':1,'y':'a'},{'x':1,'y':'c'}),2:({'x':2,'y':'b'},)}