Python用for循环更新字典仅保留首个元素,求助排查问题
问题分析与解决
你遇到的核心问题是用字典存储多个文档时的键覆盖问题:
字典的核心特性是键唯一,每个键只能对应一个值。你用new_dict.update(i)时,会把当前文档i里的所有键值对覆盖到new_dict中——因为每个MongoDB文档都包含_id、company这些相同的键,所以每一次循环都会把new_dict里的旧值替换成当前文档的新值,最后自然只剩最后一个符合条件的文档。
修正方案
想要保存多个文档,应该用列表作为存储容器,列表可以容纳多个独立的字典(文档)。修改后的代码如下:
# 从MongoDB获取数据 upd = collection.find() # 用列表存储过滤后的结果(替换原来的空字典) new_list = [] for doc in upd: # 跳过指定_id的文档 if doc['_id'] not in ['1','2','3','5']: new_list.append(doc) # 将符合条件的文档添加到列表 # 打印所有符合条件的文档 for item in new_list: print(item)
额外说明
你原代码里的test_dict未定义就调用test_dict.update(i),属于无效代码,会引发报错,建议直接删除这一行。
内容的提问来源于stack exchange,提问作者Abdul Rahuman
相关产品推荐
相关产品推荐

