Не уверен, действительно ли у меня возникла проблема, но здесь мы go:
Прежде всего, я бы порекомендовал вам избегать использования имен переменных, таких как j
и i
; легче понять, что делает код, если имена переменных описывают то, что они содержат.
На самом деле вы используете any()
неправильным образом. any()
получает итерацию, возвращает True
, если хотя бы один элемент в этой итерации равен True
и False
в противном случае.
Одно небольшое изменение в том, что вы уже должны заставить его работать, может заменить второй для l oop для следующего:
for j in inis:
if j['iniDescTipo'] == "Proposta de Lei":
i = j['iniEventos']['pt_gov_ar_objectos_iniciativas_EventosOut']
if any(map(lambda elem: elem["fase"] == "Decreto (Publicação)", i):
try:
pl.update({j['iniTitulo']: [j['iniTitulo'], j['iniNr'], j['dataInicioleg'], j['dataFimleg'], j['iniEventos']['pt_gov_ar_objectos_iniciativas_EventosOut'][0]['dataFase'], "1"]})
except KeyError:
pl.update({j['iniTitulo']: [j['iniTitulo'], j['iniNr'], j['dataInicioleg'], j['dataFimleg'], j['iniEventos']['pt_gov_ar_objectos_iniciativas_EventosOut']['dataFase'], "0"]})
else:
pass
Таким образом, вы преобразуете свой массив i
в список логических значений, которые равны True
, если элемент имеет fase == "Decreto (Publicacao)"
и False
в противном случае; что необходимо для ввода any()
.
Что касается части кода try: except:
, я почти уверен, что это может быть лучше, но, не зная, что содержат эти объекты, трудно рекомендовать лучшее решение.
Надеюсь, это поможет!