![](/img/trans.png)
[英]How to get user selected value from SelectField in python Flask WTF?
[英]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.