如何将MongoDB字典get()方法返回的列表转为字典?
解决MongoDB嵌套文档中Brand列表转字典的问题
我来帮你搞定这个问题!你从MongoDB获取到的Brand字段是一个列表结构,里面每个元素都是仅包含单个品牌键的字典。要把它转换成以品牌名为键、对应车型列表为值的字典,这里有几种简洁的实现方式:
方法一:循环遍历合并(直观易懂)
先拿到Brand列表,然后逐个遍历里面的单键字典,把键值对合并到新字典里:
myclient = pymongo.MongoClient('mongodb://someCollections') mydb = myclient['data'] mycol = mydb['Test_CarList'] x = mycol.find_one() # 获取Brand列表,默认空列表避免报错 brand_list = x.get("Brand", []) brand_dict = {} # 遍历每个品牌项 for item in brand_list: # 每个item是单键字典,直接取出键和对应车型列表 for brand_name, models in item.items(): brand_dict[brand_name] = models
方法二:字典推导式(简洁高效)
如果喜欢更紧凑的代码,可以用嵌套的字典推导式一步完成转换:
myclient = pymongo.MongoClient('mongodb://someCollections') mydb = myclient['data'] mycol = mydb['Test_CarList'] x = mycol.find_one() brand_list = x.get("Brand", []) brand_dict = {k: v for item in brand_list for k, v in item.items()}
额外说明:处理重复品牌
如果你的Brand列表里存在重复的品牌名(比如两个元素都包含Ford),上面的方法会用后面的车型列表覆盖前面的。要是需要合并重复品牌的车型,可以修改代码如下:
brand_dict = {} for item in brand_list: for brand_name, models in item.items(): if brand_name in brand_dict: # 合并车型列表 brand_dict[brand_name].extend(models) else: brand_dict[brand_name] = models
举个实际转换的例子:
假设原Brand列表是:
[ { "Ford": [ { "Modell": "Kuga", "ps": "125", "registered": True }, { "Modell": "Focus", "ps": "78", "registered": False } ]}, { "Toyota": [ { "Modell": "Camry", "ps": "180", "registered": True } ]} ]
转换后的brand_dict会变成:
{ "Ford": [ { "Modell": "Kuga", "ps": "125", "registered": True }, { "Modell": "Focus", "ps": "78", "registered": False } ], "Toyota": [ { "Modell": "Camry", "ps": "180", "registered": True } ] }
内容的提问来源于stack exchange,提问作者Max Mark
相关产品推荐
相关产品推荐

