Python(烧瓶)-如何在没有“ for循环”的情况下从数据中获取值

时间:2018-12-27 03:43:49

标签: python flask

我是Python的新手。我有问题。

这是数据:

languages =[
{'name': 'java','version': '2.0'}, 
{'name': 'python',"version": "3"}, 
{'name': 'ruby','version': '2.3'}
]

python代码:

@app.route('/test3/<name>', methods=['GET']) 
def test3(name):
    for language in languages:
        if language['name'] == name: 
            return jsonify([language])
    return ("err")

因此,如果我想获取红宝石数据,我的网址将为http://localhost:5000/test3/ruby 结果将是:

[
  {
    "name": "ruby", 
    "version": "2.3"
  }
]

但是如何在没有“ for loop”的情况下获取红宝石数据?

我尝试了另一个示例,如果我的数据是:

data = {'1':'java', '2':'python', '3':'ruby'}

python代码:

@app.route('/data/<userid>', methods=['GET']) 
def returnOneofData(userid):
    if userid in data:
        r = jsonify({userid:data[userid]})          
    else:
        r = (userid + ' is not found')
    return r

我使用'if else',而不是'for loop'。

以便我可以使用以下网址获取红宝石:http://localhost:5000/data/3 无需使用for循环。

我知道这两个数据是不同的类型, 有没有什么方法可以在没有for循环的情况下从第一个数据(语言)中获取红宝石?

3 个答案:

答案 0 :(得分:0)

在许多情况下,您应该将数据放入数据库中,并使用数据库保存/查询数据。 Sqlite3是适合新手的良好数据库。如果您的数据很小,并且您确实不想使用数据库,则可以将数据保存在配置文件(例如json文件)中,而不必直接将数据保存到代码中。

作为您的问题,我认为对于小尺寸数据,“ for循环”并不是一个不错的选择。如果您不喜欢它,则可以像第二个数据一样更改数据结构:

languages ={
  'java':{'version': '2.0'}, 
  'python':{'version': '3'}, 
  'ruby':{'version': '2.3'}
}

并使用您的“其他”来执行此操作。

您还可以使用另一种“ for循环”格式。

[language for language in language if language['name']=='ruby' 

答案 1 :(得分:0)

假设数据遵循相同的格式,则可以将数据转换为语言版本对的字典,以进行简单,有效的查找。 dict.get函数可用于通过键访问值,如果找不到该语言,则可以提供默认错误值:

languages = [{'name': 'java', 'version': '2.0'}, {'name': 'python', 'version': '3'}, {'name': 'ruby', 'version': '2.3'}]
new_languages = dict(i.values() for i in languages)
#{'java': '2.0', 'python': '3', 'ruby': '2.3'}

@app.route('/test3/<name>', methods=['GET']) 
def test3(name):
   return flask.jsonify({'lang':name, 'result':new_languages.get(name, 'ERR')})

答案 2 :(得分:0)

尝试一下:

@app.route('/test3/<name>', methods=['GET']) 
def test3(name):
   return list(filter(lambda language: language.get('name')==name , languages))