J'ai un dictionnaire qui contient plusieurs clés et valeurs, dont l'une contient une liste de plusieurs dictionnaires. Je dois être en mesure de trouver si une valeur donnée existe dans ces dictionnaires, mais je ne sais pas comment les vérifier quand elles existent non seulement dans une liste, mais dans une propriété d'objet.
Alors qu'une vérification de la boucle for pourrait accomplir cela, la propriété pourrait finir par contenir des centaines de valeurs, ce qui rendrait cette approche inefficace.
J'ai également essayé des variantes de:
if [
Mais, je continue à obtenir des TypeErrors que les index de liste doivent être un entier ou une tranche (Les valeurs sont des chaînes).
Un exemple de code serait:
dictExample = {
"name": "yes",
"age": 25,
"Check_Me": [
{"type": "code", "value": "001"},
{"type": "code", "value": "002"},
{"type": "code", "value": "003"},
{"type": "code", "value": "004"},
{"type": "code", "value": "005"}
],
}
if "007" not in dictExample["Check_Me"]["value"]:
print("It works!")
else:
print("Failure...")
(je ne peux pas télécharger le code réel, mais c'est à peu près ce à quoi je suis confronté .)
La sortie attendue serait que le code s'exécute sans erreur et qu'il soit capable de trouver avec succès si la valeur est dans le dictionnaire imbriqué ou non.
3 Réponses :
dictExample = {
"name": "yes",
"age": 25,
"Check_Me": [
{"type": "code", "value": "001"},
{"type": "code", "value": "002"},
{"type": "code", "value": "003"},
{"type": "code", "value": "004"},
{"type": "code", "value": "005"}
],
}
if "007" not in [d['value'] for d in dictExample['Check_Me']]:
print("It works!")
else:
print("Failure...")
Just iterate over Check_Me and get all the values of key 'value' from dictionary.
Un exemple consiste à utiliser la fonction intégrée qui court circuits lorsque la première correspondance est trouvée. Cependant, il existe plusieurs options
if not any("007" in x["value"] for x in dictExample["Check_Me"]):
print("It works!")
Vous pouvez avoir besoin d'une récursivité:
def val_in_dict(my_val, the_dict):
for value in the_dict.values():
if my_val == value:
return True
elif isinstance(value, list):
for element in value:
if isinstance(element, dict) and val_in_dict(my_val, element):
return True
return False
if val_in_dict("007", d):
print("It works")
Vous pouvez également changer une ligne là-haut en isinstance (value, (list, tuple)) ou quelque chose de plus compliqué. L'utilisation de la récursivité vous permet d'être plus flexible sur la profondeur de votre hiérarchie de données.