0
点赞
收藏
分享

微信扫一扫

python 之 列表中字典的分组(三种写法,总有一款适合你)


一、使用场景

在工作中有时我们需要进行对数据进行分组,统计每组下的用户

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)


举报

相关推荐

0 条评论