我是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循环的情况下从第一个数据(语言)中获取红宝石?
答案 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))