Как получить данные из ImmutableMultiDict в python3 - PullRequest
0 голосов
/ 05 мая 2018

Привет, я очень новичок в программировании на Python. В настоящее время я разрабатываю небольшое приложение, используя колбу для пользователей, чтобы представить данные. Форма генерируется динамически. Я не использую WTForms Вот часть HTML, которая генерирует форму

{% if message %}
            {% for data in message %}
            <tr>
                <th><input type="text" name="matchnumber" value="{{data.get('matchno')}}" readonly></th>
                <th>{{data.get('team1')}}</th>
                <th>vs</th>
                <th>{{data.get('team2')}}</th>
                <th><select name="winner">
                <option value="{{data.get('team1')}}">{{data.get('team1')}}</option>
                <option value="{{data.get('team2')}}">{{data.get('team2')}}</option>
                </select></th>
                <th><input type="number" placeholder="Point" name="point" value="{{request.form.point }}" required min="500" max="1000"></th>  
            </tr>
            {% endfor %}
          {% endif %}
        <table> 

форма генерируется как ожидалось. Он будет иметь минимум 8 столбцов, он также может быть больше в зависимости от ответа, который он получает из базы данных. Но настоящая проблема возникает, когда я пытаюсь получить данные формы. Данные, которые я получаю из формы, снова будут сохранены в базе данных. Это часть Python, откуда я пытаюсь обработать ответ

     result=request.form
     result2=result.to_dict(flat=False)
     for key,value in result2.items():
                   print(key,value)

проблема в том, что первая строка дает данные ImmutableMultiDict, и я не могу перебирать их, и даже после преобразования их в правильный словарь я не могу правильно извлечь каждое поле переменная результата имеет вывод как

ImmutableMultiDict([('matchnumber', '1'), ('matchnumber', '2'), ('matchnumber', '3'), ('matchnumber', '4'), ('matchnumber', '5'), ('matchnumber', '6'), ('matchnumber', '7'), ('matchnumber', '8'), ('winner', 'Russia'), ('winner', 'Egypt'), ('winner', 'Morocco'), ('winner', 'Portugal'), ('winner', 'France'), ('winner', 'Argentina'), ('winner', 'Peru'), ('winner', 'Croatia'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800')])

после преобразования в словарь переменная result2 имеет это в качестве вывода

{'matchnumber': ['1', '2', '3', '4', '5', '6', '7', '8'], 'winner': ['Russia', 'Egypt', 'Morocco', 'Portugal', 'France', 'Argentina', 'Peru', 'Croatia'], 'point': ['800', '800', '800', '800', '800', '800', '800', '800']}

когда я перебираю элементы result2, это генерируемый вывод

matchnumber ['1', '2', '3', '4', '5', '6', '7', '8']
winner ['Russia', 'Egypt', 'Morocco', 'Portugal', 'France', 'Argentina', 'Peru', 'Croatia']
point ['800', '800', '800', '800', '800', '800', '800', '800']

Точная проблема, с которой я сталкиваюсь, заключается в том, что я не могу перебирать список одновременно, я попытался найти и найти решения относительно того, как получить точные данные из ImmutableMultiDic, но я не получил хорошего результата. Пожалуйста, кто-нибудь может предложить мне лучший способ получить данные из формы. Вся форма будет динамичной, так как она будет меняться в зависимости от даты обновления списка совпадений. Я не использую ORM, я использую только сырой SQL для обработки данных Заранее спасибо

1 Ответ

0 голосов
/ 05 мая 2018

Предположим, вам нужны данные в этом формате:

[{'matchnumber': '1', 'winner': 'Russia', 'point': '800'}, {'matchnumber': '2', 'winner': 'Egypt', 'point': '800'}, ...]

Вы можете попробовать

output = []
for i in range(len(result2['matchnumber'])):
    di = {}
    for key in result2.keys():
        di[key] = result2[key][i]
    output.append(di)
print(output)
[{'matchnumber': '1', 'winner': 'Russia', 'point': '800'}, {'matchnumber': '2', 'winner': 'Egypt', 'point': '800'}, {'matchnumber': '3', 'winner': 'Morocco', 'point': '800'}, {'matchnumber': '4', 'winner': 'Portugal', 'point': '800'}, {'matchnumber': '5', 'winner': 'France', 'point': '800'}, {'matchnumber': '6', 'winner': 'Argentina', 'point': '800'}, {'matchnumber': '7', 'winner': 'Peru', 'point': '800'}, {'matchnumber': '8', 'winner': 'Croatia', 'point': '800'}]

Затем вы можете перебрать output и обработать каждый словарь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...