J'ai une liste de dictionnaires et une boucle Comment puis-je empêcher la boucle de casser si une valeur pour "ID" dans la plage de la boucle est absente dans les dictionnaires. ? par exemple p> résulte: p> J'ai essayé avec si ValueError: Continuer CODE> Mais ceci a entraîné la vidange final_dcts code>. p> p>
3 Réponses :
Vous pouvez essayer d'utiliser un essai / à l'exception de la clause pour gérer l'exception et atteindre le comportement souhaité:
for i in range(3):
try:
type_max = max((x for x in lst_of_dcts if x['keyA'] and x['id'] == i), key=lambda x: x['keyB'])
final_dcts.append(type_max)
except ValueError:
continue
Vous pouvez utiliser un ESSAYER / SAUF CODE> Block pour l'attraper. lst_of_dcts = [dict(keyA=True, keyB=10, id=0),
dict(keyA=True, keyB=10, id=1),
dict(keyA=True, keyB=10, id=2)]
final_dcts = []
for i in range(3):
try:
type_max = max((x for x in lst_of_dcts if x['keyA'] and x['id'] == i), key=lambda x: x['keyB'])
final_dcts.append(type_max)
except ValueError as e:
# do anything you want
pass
print(final_dcts)
Alternativement à l'aide d'exceptions, vous pouvez itérer jusqu'à ce que i code> est égal à la valeur max de ID code>. Cependant, cela n'est viable que lorsque les valeurs code> ID code> sont une séquence continue de nombres (par exemple 0, 1, 2, ..., pas 0, 2, 3). lst_of_dcts = [dict(keyA=True, keyB=10, id=0),
dict(keyA=True, keyB=10, id=1),
dict(keyA=True, keyB=10, id=2)]
final_dcts = []
max_id = max(lst_of_dcts, key=lambda x: x["id"])["id"] # max id
for i in range(max_id + 1):
type_max = max((x for x in lst_of_dcts if x['keyA'] and x['id'] == i), key=lambda x: x['keyB'])
final_dcts.append(type_max)
print(final_dcts)
Si ValueError: CODE> ne comprendra pas une erreur (et évalue toujours la vérité-y), vous avez besoinessayer code> etsauf code>. Voir docs.python.org/3/taturial/errors.html#Handling -Exceptions .Merci à tous pour vos réponses et pour le lien avec la documentation officielle!