Python中+=追加字典到列表仅返回键的问题排查
问题产生原因
你代码里的异常来自Python的基础语法规则:
- 列表的
+=操作等价于list.extend()方法,作用是把右侧可迭代对象的每一个拆分元素依次追加到列表末尾,而非把右侧对象作为整体追加 - 字典属于可迭代对象,但直接对字典做迭代时,Python默认只会遍历字典的键,不会返回完整的键值对结构
这就导致你写reported_workers += person时,实际是把每个person字典的所有字段名(也就是键)挨个拆出来塞进了列表,完全没有存入字段对应的值,最终输出就只有重复的字段名。
正确实现方案
根据你要存入列表还是字典的不同需求,对应写法如下:
1. 筛选符合条件的员工存入列表(匹配你代码中reported_workers的设计)
用list.append()方法替代+=,这个方法会把传入的员工字典作为单个完整元素追加到列表中,不会拆分字典结构:
# worker_detail:存储待匹配的员工ID集合/列表 # workers:接口返回的全量员工数据列表 reported_workers = [] for person in workers: if person['id'] in worker_detail: reported_workers.append(person) print(reported_workers)
如果要简化代码,也可以直接用列表推导式实现相同逻辑,执行效率更高:
reported_workers = [person for person in workers if person['id'] in worker_detail]
2. 筛选符合条件的员工存入字典(匹配你代码中information字典的设计)
字典的update()方法适合批量合并键值对,存单条员工数据时直接按键赋值即可,比如以员工ID作为唯一键存储对应信息:
information = {} for person in workers: if person['id'] in worker_detail: information[person['id']] = person
补充提示:如果你的
worker_detail存的不是员工ID,而是完整的员工字典对象,需要先把里面的ID提取出来再做匹配,否则判断逻辑会失效:# 先提取所有待匹配的员工ID match_ids = {wd['id'] for wd in worker_detail} reported_workers = [person for person in workers if person['id'] in match_ids]
内容的提问来源于stack exchange,提问作者ellie
相关产品推荐
相关产品推荐

