You need to enable JavaScript to run this app. Python如何给字典同key追加值?合并同id字典role字段仅存最后值报错
优惠活动
大模型
产品
解决方案
定价
更多

Python如何给字典同key追加值?合并同id字典role字段仅存最后值报错

错误排查
  • 核心错误:list_dict.get()的入参键写错,你将当前循环的id变量element_id误写为不存在的emp_id,导致每次获取历史存储数据时永远匹配不到结果,返回空字典,之前存储的role列表会被覆盖,仅保留最后一次循环的role值。
  • 附加可优化点:原代码使用pop方法会修改原始输入的_list中的字典,若后续需要用到原始数据会产生副作用。
正确实现方案

修复原有代码版本

_list = [
    { 'id': '1', 'contactName': 'John', 'contactEmail': 'John@abc.com', 'role': 'Developer' }, 
    { 'id': '2', 'contactName': 'Elon', 'contactEmail': 'Elon@abc.com', 'role': 'Developer' }, 
    { 'id': '3', 'contactName': 'Suar', 'contactEmail': 'Suar@abc.com', 'role': 'Developer' }, 
    { 'id': '3', 'contactName': 'Suar', 'contactEmail': 'Suar@abc.com', 'role': 'Tester' } 
]
list_dict = {}
for element in _list:
    element_id = element.pop('id')
    element_role = element.pop('role')
    # 修正get的键为当前element_id
    list_dict[element_id] = list_dict.get(element_id, {})
    list_dict[element_id].update(element)
    list_dict[element_id]['role'] = list_dict[element_id].get('role', [])
    list_dict[element_id]['role'].append(element_role)
test = {'contacts': list_dict}
print(test)

不修改原列表的优化版本

_list = [
    { 'id': '1', 'contactName': 'John', 'contactEmail': 'John@abc.com', 'role': 'Developer' }, 
    { 'id': '2', 'contactName': 'Elon', 'contactEmail': 'Elon@abc.com', 'role': 'Developer' }, 
    { 'id': '3', 'contactName': 'Suar', 'contactEmail': 'Suar@abc.com', 'role': 'Developer' }, 
    { 'id': '3', 'contactName': 'Suar', 'contactEmail': 'Suar@abc.com', 'role': 'Tester' } 
]
list_dict = {}
for element in _list:
    element_id = element['id']
    if element_id not in list_dict:
        # 首次出现该id时初始化信息
        list_dict[element_id] = {
            'contactName': element['contactName'],
            'contactEmail': element['contactEmail'],
            'role': []
        }
    # 追加role
    list_dict[element_id]['role'].append(element['role'])
test = {'contacts': list_dict}
print(test)

两种实现运行后都可以得到预期结果:

{'contacts': {
    '1': {'contactName': 'John', 'contactEmail': 'John@abc.com', 'role': ['Developer']}, 
    '2': {'contactName': 'Elon', 'contactEmail': 'Elon@abc.com', 'role': ['Developer']}, 
    '3': {'contactName': 'Suar', 'contactEmail': 'Suar@abc.com', 'role': ['Developer', 'Tester']}
}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:15:02