You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中如何从字典列表按user_id分组提取对应id值?

按用户ID分组提取Slot ID列表

我正在使用Python3,需要处理如下包含字典的数据集,目标是按user_id分组,将每个用户对应的所有id收集到列表中。尝试了一些方法但没得到正确结果。

数据集:

slots_data = [
        {
            "id":551,
            "user_id":1,
            "time":"199322002",
            "expire":"199322002"
        },
        {
            "id":552,
            "user_id":1,
            "time":"199322002",
            "expire":"199322002"
        },
        {
            "id":525,
            "user_id":3,
            "time":"199322002",
            "expire":"199322002"
        },
        {
            "id":524,
            "user_id":3,
            "time":"199322002",
            "expire":"199322002"
        },
        {
            "id":553,
            "user_id":1,
            "time":"199322002",
            "expire":"199322002"
        },
         {
            "id":550,
            "user_id":2,
            "time":"199322002",
            "expire":"199322002"
        }
    ]

期望输出:

[
    {"user_id":1,"slots_ids":[551,552,553]},
    {"user_id":2,"slots_ids":[550]},
    {"user_id":3,"slots_ids":[524,525]}
]

我尝试的错误代码:

final_list = []
for item in slots_data:
    obj = obj.dict()
    obj = {
    "user_id":item["user_id"],
    "slot_ids":item["id"]
    }

    final_list.append(obj)

print(set(final_list))

解决方案

你的错误在于每次循环都创建新字典直接添加到列表,没有对相同user_id的条目合并,且set()无法直接处理字典(字典不可哈希)。正确逻辑是先通过临时字典分组收集ID,再转换为目标格式:

基础写法

# 创建临时字典,键为user_id,值为对应的id列表
user_slots = {}
for item in slots_data:
    user_id = item["user_id"]
    slot_id = item["id"]
    # 初始化空列表(若user_id未在字典中)
    if user_id not in user_slots:
        user_slots[user_id] = []
    # 将当前slot_id加入对应列表
    user_slots[user_id].append(slot_id)

# 转换为期望的列表结构
final_list = [{"user_id": uid, "slots_ids": ids} for uid, ids in user_slots.items()]

print(final_list)

优化写法(使用collections.defaultdict)

用defaultdict可以自动处理列表初始化,简化代码:

from collections import defaultdict

user_slots = defaultdict(list)
for item in slots_data:
    user_slots[item["user_id"]].append(item["id"])

final_list = [{"user_id": uid, "slots_ids": ids} for uid, ids in user_slots.items()]

print(final_list)

两种方法都能得到目标输出,核心是先按user_id分组收集ID,再转换为指定的字典列表结构。

内容的提问来源于stack exchange,提问作者Ahmed Yasin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:25:23