【发布时间】:2015-11-04 11:34:52
【问题描述】:
我想要一个函数,它可以根据所有字典共有的任意键集将字典列表分组为字典子列表。
例如,我希望根据一组键将以下列表分组到字典的子列表中
l = [{'name':'b','type':'new','color':'blue','amount':100},{'name':'c','type':'new','color':'red','amount':100},{'name':'d','type':'old','color':'gold','amount':100},{'name':'e','type':'old','color':'red','amount':100},
{'name':'f','type':'old','color':'red','amount':100},{'name':'g','type':'normal','color':'red','amount':100}]
如果我想按类型分组,将产生以下列表,其中有一个子列表,其中每个子列表具有相同的类型:
[[{'name':'b','type':'new','color':'blue','amount':100},{'name':'c','type':'new','color':'red','amount':100}],[{'name':'d','type':'old','color':'gold','amount':100},{'name':'e','type':'old','color':'red','amount':100},
{'name':'f','type':'old','color':'red','amount':100}],[{'name':'g','type':'normal','color':'red','amount':100}]]
如果我想按类型和颜色进行分组,如果列表包含具有相同类型和颜色的子列表,则会出现以下结果:
[[{'name':'b','type':'new','color':'blue','amount':100}],[{'name':'c','type':'new','color':'red','amount':100}],[{'name':'d','type':'old','color':'gold','amount':100}],[{'name':'e','type':'old','color':'red','amount':100},
{'name':'f','type':'old','color':'red','amount':100}],[{'name':'g','type':'normal','color':'red','amount':100}]]
我了解以下功能可以一键分组,但我想多键分组:
def group_by_key(l,i):
l = [list(grp) for key, grp in itertools.groupby(sorted(l, key=operator.itemgetter(i)), key=operator.itemgetter(i))]
这是我使用上面的 group_by_function 的尝试
def group_by_multiple_keys(l,*keys):
for key in keys:
l = group_by_key(l,key)
l = [item for sublist in l for item in sublist]
return l
问题在于它在按键分组后立即取消分组。相反,我想用另一个键重新组合它,并且仍然有一个子列表列表。
【问题讨论】:
标签: python arrays dictionary