读取BSON文件遇AttributeError: 'dict'无'distinct'属性该如何解决?
问题分析与解决办法
出错原因
distinct()是MongoDB集合对象(比如pymongo里的Collection类)的专属方法,你读取BSON文件后得到的是Python原生的dict(或嵌套dict的list),这类原生数据结构根本没有distinct属性,所以会触发这个报错。
解决步骤
先明确你的BSON数据结构
读取文件后先打印数据类型和内容,确认是单个字典还是多个字典组成的列表:import bson from pprint import pprint with open('你的文件.bson', 'rb') as f: # 单个BSON文档用loads,多个文档用decode_all data = bson.loads(f.read()) # 或者bson.decode_all(f.read()) print(type(data)) pprint(data)根据结构提取键值
- 如果是单个字典:直接用
字典.get('键名')提取对应值,比如data.get('username'),不存在的键会返回None,避免触发KeyError。 - 如果是字典列表:要提取某个键的所有值,用列表推导式;要去重的话,转成集合再转回列表即可:
# 提取所有'age'字段的值(过滤掉不存在该键的情况) all_ages = [doc.get('age') for doc in data if doc.get('age') is not None] # 得到去重后的结果 distinct_ages = list(set(all_ages))
- 如果是单个字典:直接用
总结
不需要额外编写复杂代码,用Python原生的字典、列表操作就能实现你要的功能,别把MongoDB集合的方法套在普通Python数据结构上就行。
内容的提问来源于stack exchange,提问作者Women_it_2022
相关产品推荐
相关产品推荐

