匹配pymongo中的实例2列表

时间:2018-04-18 00:18:05

标签: mongodb

我在pymongo中使用管道来查询json文件。

我有一个名单,“六城”包含6个“城市”,其中书店数量最多,即书店数量最少。 (包含6个pymongo实例)

    {'_id': 'city1', 'count': 84}
    {'_id': 'city2', 'count': 65}
    {'_id': 'city3', 'count': 61}
    {'_id': 'city4', 'count': 59}
    {'_id': 'city5', 'count': 84}
    {'_id': 'city6', 'count': 64}

我有第二个列表,“travelcities”,其中包含json文件中每个“城市”(20+)的旅行书店数量。 (包含20个+ pymongo实例)                 {'_id':'city1','count':42} ......等等

请注意:此列表包含第一个列表中没有的城市。

我想用这些清单来计算6个最高城市中旅游书店的比例。

公共密钥将是“城市”,因为它出现在两个列表的文档中 即在列表2中:city1:42除以列表1:city1:84 = 0.5比率

我不确定如何在pymongo中执行此操作,因为信息位于列表中的mongo文档中。

我认为某种嵌套循环可行:

 dict={} 
 for i in sixcities: #loop through the first list
   dict[i["_id"]]=i["count"]  
   for i in travelcities: #loop through second list
     dict[i["_id"]]=i["count"]/(dict[i["_id"]]) #ratio

但我得到以下结果:     KeyError:'city15' 这个城市并没有出现在第一个列表中作为书店数量最多的6个之一,但它确实出现在第二个包含旅游书店的地方。

感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

您的代码中的一个问题是您正在使用相同的变量' i'在外圈和内圈

考虑这个代码,对于第一个列表中的每个城市在第二个列表中搜索它,然后计算比率。

Exception in thread "main" java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support because Hive classes are not found.
    at org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:854)
    at hiveextract$.main(hiveextract.scala:13)
    at hiveextract.main(hiveextract.scala)

请注意,如果第二个列表中不存在该城市,则答案仍然是第一个列表中城市的计数。按照您想要的方式处理这个角落的情况。