【问题标题】:Searching a dictionary in a list through a flask API通过烧瓶 API 在列表中搜索字典
【发布时间】:2018-06-19 21:29:33
【问题描述】:

我尝试在使用 POST 方法时通过 URLlist 中搜索 dictionary,我正在使用 postman 进行此操作。搜索的URL示例如下:

http://localhost:5000/api/v1/7/requests

7 是一个 id ,如果它存在,它会被发布并在字典列表中搜索。这是我要搜索的dictionary 的示例列表。

[
        {
            "id": 1,
            "offer_details": "This offer cuts down 3% of the drive, you want ",
            "offer_name": "eid offer ",
            "offer_price": 8000
        },
        {
            "id": 2,
            "offer_details": "This offer cuts down 3% of the drive, you want ",
            "offer_name": "supper offer ",
            "offer_price": 8000
        },
        {
            "id": 3,
            "offer_details": "This offer cuts down 3% of the drive, you want ",
            "offer_name": "easter offer ",
            "offer_price": 8000
        }
    ]

所以下面是我的代码,如果 id 可用或不可用,我想调整它以很好地搜索列表。

目前代码没有很好地搜索列表

class RequestRideOffer(Resource):

    def post(self, rideId):

        parser = reqparse.RequestParser()
        parser.add_argument('token', location='headers')      
        args = parser.parse_args()

        if not args['token']:
            return make_response(jsonify({"message": "Token is missing"}), 401)
        decoded = decode_token(args['token'])
        if decoded["status"] == "Failure":
            return make_response(jsonify({"message": decoded["message"]}), 401)
        if decoded['isDriver'] == "False":
            return make_response(jsonify({"message": "Invalid for Drivers "}), 401)

                # return make_response(jsonify({"message": "Meal not found"}), 404)
                #performing a search for the rideId
        if not any(d['id'] == rideId for d in rides_list):
            return make_response(jsonify({"message": "Request has been made successfully."}), 400)
        else :
            return make_response(jsonify({"message": "Sorry,No ride offer available for your request."}), 400)


        return make_response(jsonify({"message": "Invalid request, please insert again."}), 400)

这是我在上面的代码中搜索的方式,我该如何改进这个代码:

#performing a search for the rideId
    if not any(d['id'] == rideId for d in rides_list):
        return make_response(jsonify({"message": "Request has been made successfully."}), 400)
    else :
        return make_response(jsonify({"message": "Sorry,No ride offer available for your request."}), 400)

【问题讨论】:

  • 您能否将代码示例限制在与您的问题相关的部分?你想要的行为的测试是什么(代码行assert)?
  • @EvgenyPogrebnyak,我已经编辑了我的问题

标签: python list dictionary flask postman


【解决方案1】:

也许你可以简单地使用in

if rideId in [x['id'] for x in rides_list]:
   ...

一些例子:

rideId = 2
rides_list = [
        {
            "id": 1,
            "offer_details": "This offer cuts down 3% of the drive, you want ",
            "offer_name": "eid offer ",
            "offer_price": 8000
        },
        {
            "id": 2,
            "offer_details": "This offer cuts down 3% of the drive, you want ",
            "offer_name": "supper offer ",
            "offer_price": 8000
        },
        {
            "id": 3,
            "offer_details": "This offer cuts down 3% of the drive, you want ",
            "offer_name": "easter offer ",
            "offer_price": 8000
        }
    ]

if rideId in [x['id'] for x in rides_list]:
    print('Found it!', rideId)

【讨论】:

  • 很高兴它对你有用!再看看您的状态代码 - 我认为您在“没有可用于您的请求的乘车优惠”和“无效请求,请重新插入”中需要 400 以外的其他内容。
  • "message": "Request has been made successfully."}), 200 - 这是成功,对吗?jsonify({"message": "Sorry, no ride offer available for your request."}), 200 这也是成功 - api 工作,make_response(jsonify({"message": "Invalid request, please insert again."}), 400) 确实是格式错误的请求错误,它的 400。
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多