python列表字典嵌套时,对字典value值相同的进行分组

1,359 阅读1分钟

最近工作中遇到了一个需求,需要将一个列表中的嵌套字典,根据字典的某个value来做分组

如下

a = [{"name": 'tom', "age": '18'}, {"name": "jack", "age": "42"}, {"key": "lily", "age": "18"}]

需要把age相同的字典分组取出来

解决方案

from itertools import groupby
from operator import itemgetter

rows = [{"name": 'tom', "age": 1}, {"name": "jack", "age": 12}, {"name": "lily", "age": 12}]

for date, items in groupby(sorted(rows, key=itemgetter('age')), key=itemgetter('age')):
    print(date,list(items))

cookies

在完成到这一步的时候,发现在最后for循环中取item的值的时候,取到的内容为空,觉得是内置模块实现过程中有对items进行操作,所以进行一次深拷贝解决问题

from itertools import groupby
from operator import itemgetter
import copy

rows = [{"name": 'tom', "age": 1}, {"name": "jack", "age": 12}, {"name": "lily", "age": 12}]

for date, items in groupby(sorted(rows, key=itemgetter('age')), key=itemgetter('age')):
    items = copy.deepcopy(items)
    print(date,list(items))

感谢评论区的大佬的提醒,错误已更正!