如何在python的这段代码中获得正确json格式的输出

2024-09-28 01:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究python和mongodb。我试着通过把他们的名字和他们的电话号码匹配起来,从一张有的桌子上找到他们的名字。电话号码在我从另一个表中获取号码创建的列表中。它的工作正常,但我得到的输出打印两次

phone = ["9585507882","9542158582"]           
datum = []
for i in phone:
    cursor = db.name.find({"phone": i},{"_id": False})
    value = yield cursor.count()
    if value is 0:
        pass
    else:
        result = []
        for document in (yield cursor.to_list(length=100)):
            datum.append(document)
        print(datum)
        self.write(bson.json_util.dumps({"result": datum}))

我的输出是

{"result": [{"phone": "9585507882", "name": "Sanjay"}]}{"result": [{"phone": "9585509882", "name": "Sanjay"}, {"phone": "9542158582", "name": "Joe"}]}

有人能帮我解决这个问题吗


Tags: nameinforvaluemongodbphone电话号码result
2条回答

更简单的方法是

phone = ["9585507882","9542158582"]           
cursor = db.name.find({"phone": {"$in":phone}},{"_id": 0}).limit(100)       #$in will get you all document in phone array
result = list(cursor) #list(cursor) will convert cursor to python list
#you can then do anything you want

您正在for循环中调用self.write(),而您仍在构建datum。将其移到外部,使其仅在收集完所有数据后运行:

for i in phone:
    [...]
    if value == 0:  # don't use "is" for value comparison!
        pass
    else:
        [...]
        for document in (yield cursor.to_list(length=100)):
            datum.append(document)
        [...]
self.write(bson.json_util.dumps({"result": datum}))

还有,而不是

if value == 0:
    pass
else:
    [do_stuff]

最好这样做

if value:
    [do_stuff]

还有,result = []有什么用?你不能拿那张单子做任何事

相关问题 更多 >

    热门问题