繁体   English   中英

Python(烧瓶)-如何从数据中获取值而无需'for loop'

[英]Python(flask)--how to get a value from a data without 'for loop'

我是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'。

这样我就可以使用以下URL获得红宝石: http:// localhost:5000 / data / 3,而无需使用for循环。

我知道这两个数据是不同的类型,有没有办法我可以从第一个数据(语言)中获取红宝石而无需for循环?

在许多情况下,您应该将数据放入数据库中,并使用数据库保存/查询数据。 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' 

假设数据遵循相同的格式,则可以将数据转换为语言版本对的字典,以进行简单,有效的查找。 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')})

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM