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
相关产品推荐
相关产品推荐

