一、使用场景
在工作中有时我们需要进行对数据进行分组,统计每组下的用户
users = [
{"username": "zhangsan", "age": 18},
{"username": "lisi", "age": 20},
{"username": "wanger", "age": 23},
{"username": "mazi", "age": 19},
{"username": "zhaowu", "age": 18},
{"username": "maliu", "age": 22},
{"username": "guiqi", "age": 18}
]
-
temp1比如按年龄分组,得出每组年龄下的用户信息
{
18: [
{'username': 'zhangsan', 'age': 18},
{'username': 'zhaowu', 'age': 18},
{'username': 'guiqi', 'age': 18}
],
20: [
{'username': 'lisi', 'age': 20}
],
23: [{'username': 'wanger', 'age': 23}],
19: [{'username': 'mazi', 'age': 19}],
22: [{'username': 'maliu', 'age': 22}]
}
-
temp2 获取按照年龄分组,分组下为用户名
{
18: ['zhangsan', 'zhaowu', 'guiqi'],
20: ['lisi'],
23: ['wanger'],
19: ['mazi'],
22: ['maliu']
}
二、解法三种,终有一款适合你
-
解法一
temp1 = {}
temp2 = {}
for user in users:
temp1.setdefault(user.get("age"), []).append(user)
temp2.setdefault(user.get("age"), []).append(user.get("username"))
print(temp1)
print(temp2)
-
解法二
from collections import defaultdict
temp1 = defaultdict(list)
temp2 = defaultdict(list)
for user in users:
temp1[user['age']].append(user)
temp2[user['age']].append(user.get("username"))
print(temp1)
print(temp2)
-
解法三
from operator import itemgetter
from itertools import groupby
temp1 = {}
temp2 = {}
users.sort(key=itemgetter('age')) 排序必须排序
for age, items in groupby(users, key=itemgetter('age')):
temp1[age] = [item for item in items] # 与下冲突注销一行及成功
temp2[age] = [item.get('username') for item in items]
print(temp1)
print(temp2)