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

如何在Python中按列表首个元素的值合并列表元素

按邮箱自动分组数据的实现方法

原始数据说明

你给出的原始数据使用了集合({}),但集合是无序且不保证元素顺序的,更适合用元组列表存储这类有序关联数据,修正后的数据结构如下:

original_data = [
    ('sam@yahoo.com', 7007, '1'),
    ('sam@yahoo.com', 8471, '2'),
    ('john@yahoo.com', 16113, '2')
    # 更多数据...
]

需求实现

要按邮箱自动分组,无需指定具体邮箱名称,以下是标准实现方案:

步骤1:用字典完成核心分组

利用字典的键存储邮箱,值存储该邮箱对应的所有关联详情列表,实现自动分组:

grouped_dict = {}
for item in original_data:
    email = item[0]
    # 提取邮箱外的其他字段作为详情
    details = list(item[1:])
    if email in grouped_dict:
        # 邮箱已存在,追加新详情
        grouped_dict[email].append(details)
    else:
        # 邮箱首次出现,初始化详情列表
        grouped_dict[email] = [details]

执行后grouped_dict的结果为:

{
    'sam@yahoo.com': [[7007, '1'], [8471, '2']],
    'john@yahoo.com': [[16113, '2']]
}

步骤2:转换为目标列表格式

如果需要转换成包含单个邮箱字典的列表,可通过列表推导式快速实现:

result_list = [{email: details} for email, details in grouped_dict.items()]

最终得到的result_list为:

[
    {'sam@yahoo.com': [[7007, '1'], [8471, '2']]},
    {'john@yahoo.com': [[16113, '2']]}
]

补充说明

你提到的“对比下一个元素”的思路效率较低,用字典分组是更简洁高效的方案,时间复杂度为O(n),无需手动遍历对比元素。

内容的提问来源于stack exchange,提问作者Nikolay Debolsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:51:11