python 数组中的字典元素根据多个字段分组后聚合

标题表达得不太好,直接上需求:
有这样一个数组:

role_list = ([
              {role_id: 1, role_name: 'admin', 'authority': 'create_staff'},
              {role_id: 1, role_name: 'admin', 'authority': 'delete_staff'},
              {role_id: 1, role_name: 'admin', 'authority': 'read_staff'},
              {role_id: 2, role_name: 'manager', 'authority': 'read_staff'},
              {role_id: 2, role_name: 'manager', 'authority': 'delete_staff'},
              {role_id: 3, role_name: 'staff', 'authority': 'read_staff'}
            ])

现在我想将role_list中role_id和role_name字段相同的dict聚合成一个dict,authority字段全部聚合成该dict的一个新数组类型字段,然后再组成新的list
希望得到的结果:

new_role_list = ([
                  {role_id: 1, role_name: 'admin', 'authority': ['create_staff','delete_staff','read_staff']},
                  {role_id: 2, role_name: 'manager', 'authority': ['read_staff','delete_staff']},
                  {role_id: 3, role_name: 'staff', 'authority': ['read_staff']}
            ])

请教各位有什么比较高效的实现方法?

阅读 4.2k
1 个回答
m = {}
for i in role_list:
    rid, rn = str(i['role_id']), i['role_name']
    m.setdefault(rid+rn, {
      'role_id': rid,
      'role_name': rn,
      'authority': []
    })['authority'].append(i['authority'])
print(m.values())
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题