цикл for в вызове API возвращает одинаковый результат в каждом цикле - PullRequest
0 голосов
/ 26 ноября 2018

Я написал цикл для извлечения данных из API (Limesurvey) на основе списка идентификаторов и заполнения строки в кадре данных результатом каждого цикла.

У меня есть список с идентификаторами, такими какthis:

 # list of ids

 ids = ['1','427',... ,'847']

Мой код для запроса API на основе каждого элемента списка выглядит следующим образом:

method = "get_participant_properties"
params = OrderedDict([
            ("sSessionKey", api.session_key),
            ("iSurveyID", 12345),
            ("aTokenQueryProperties", t), 
])

# loop through API query with the 'aTokenQueryProperties' stored in the list 'tids'.

attributes = []

for t in ids:
    attributes.append(api.query(method=method, params=params))

pd.DataFrame(attributes)

К сожалению, в результате получается кадр данных со 158 строками, и каждыйстрока такая же, т.е. результат запроса последнего идентификатора в моем списке (847).

1 Ответ

0 голосов
/ 26 ноября 2018

Вы не переходите в t из цикла.t в определении params не имеет отношения;если бы я запускал ваш код сейчас, я бы получил исключение NameError, потому что t не было установлено на тот момент.Выражение t в отображении params: не является действительным , оно не обновляется при каждой итерации цикла.

Установите 'aTokenQueryProperties' ключ в цикле :

method = "get_participant_properties"
params = OrderedDict([
            ("sSessionKey", api.session_key),
            ("iSurveyID", 12345),
            ("aTokenQueryProperties", None), 
])

attributes = []

for t in ids:
    params["aTokenQueryProperties"] = t
    attributes.append(api.query(method=method, params=params))

Установка "aTokenQueryProperties" в None в params OrderedDict объекте при запуске необязательна;вам нужно будет сделать это только в том случае, если важно зарезервировать его точное местоположение в порядке params, и даже тогда, потому что в вашем примере это элемент последний в отображении, вы получитевсе равно тот же вывод.

...