Python (колба) - как получить значение из данных без «для цикла» - PullRequest
0 голосов
/ 27 декабря 2018

Я новичок в 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")

, поэтому, если я хочу получить данные ruby, мой URLбудет http://localhost:5000/test3/ruby и результат будет:

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

но как мне получить данные ruby ​​без '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

Я использую «если еще», а не «для цикла».

Так что я могу получить рубин сURL: http://localhost:5000/data/3 и не нужно использовать для цикла.

Я знаю, что эти два типа данных разного типа, есть ли способ получить рубин из первых данных (языков) безпетля

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Предполагая, что ваши данные соответствуют одному и тому же формату, вы можете преобразовать данные в словарь пар язык-версия для простого и эффективного поиска.Функцию 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')})
0 голосов
/ 27 декабря 2018

Попробуйте это:

@app.route('/test3/<name>', methods=['GET']) 
def test3(name):
   return list(filter(lambda language: language.get('name')==name , languages))
0 голосов
/ 27 декабря 2018

Во многих случаях Вы должны поместить свои данные в базу данных и использовать базу данных для сохранения / запроса своих данных.Sqlite3 - хорошая база данных для новичков.Если ваши данные невелики, и вы действительно не хотите использовать базу данных, вы можете сохранить свои данные в файле конфигурации (например, в файле json) и не сохранять свои данные непосредственно в своем коде.

КакВаш вопрос, я думаю, «для цикла» не является плохим выбором для небольших данных.Если вам это не нравится, вы можете изменить структуру данных, например, свои вторые данные:

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

и использовать свое «если еще» для этого.

Вы также можете использовать другой формат для цикла.

[language for language in language if language['name']=='ruby' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...