如何在Python中按用户ID(UUID)分组生成价格列表?
Python按用户ID分组生成价格列表的实现方法
当然可以实现,以下是几种常用的实现方式:
方法一:手动遍历构建字典
直接循环遍历数据,逐个将价格添加到对应ID的列表中:
data = [ {"id": "1", "price": 1}, {"id": "1", "price": 10}, {"id": "2", "price": 3}, {"id": "1", "price": 10}, {"id": "2", "price": 8}, ] result = {} for item in data: user_id = item["id"] price = item["price"] # 若ID不在结果字典中,先初始化空列表 if user_id not in result: result[user_id] = [] result[user_id].append(price) print(result) # 输出: {'1': [1, 10, 10], '2': [3, 8]}
方法二:使用collections.defaultdict简化代码
借助defaultdict可以省去判断ID是否存在的步骤,直接追加元素:
from collections import defaultdict data = [ {"id": "1", "price": 1}, {"id": "1", "price": 10}, {"id": "2", "price": 3}, {"id": "1", "price": 10}, {"id": "2", "price": 8}, ] result = defaultdict(list) for item in data: result[item["id"]].append(item["price"]) # 若需要转为普通字典,执行 dict(result) 即可 print(dict(result)) # 输出: {'1': [1, 10, 10], '2': [3, 8]}
方法三:使用itertools.groupby分组
注意使用groupby前需要先按ID排序,因为它只会对连续的相同键进行分组:
from itertools import groupby data = [ {"id": "1", "price": 1}, {"id": "1", "price": 10}, {"id": "2", "price": 3}, {"id": "1", "price": 10}, {"id": "2", "price": 8}, ] # 先按ID排序 sorted_data = sorted(data, key=lambda x: x["id"]) result = {} for user_id, group in groupby(sorted_data, key=lambda x: x["id"]): # 从分组中提取所有价格 result[user_id] = [item["price"] for item in group] print(result) # 输出: {'1': [1, 10, 10], '2': [3, 8]}
关于UUID类型ID的说明
实际使用UUID作为用户ID时,上述方法完全适用——UUID是可哈希类型,可以直接作为字典的键,无需额外处理逻辑。
内容的提问来源于stack exchange,提问作者ax3l Garcia
相关产品推荐
相关产品推荐

