2009-05-29 6 views
3

Okay J'essaie d'opter pour une méthode plus pythonique.Vérification pour voir si une liste existe dans une autre liste?

Comment puis-je faire ce qui suit:

required_values = ['A','B','C'] 
some_map = {'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4} 

for required_value in required_values: 
    if not required_value in some_map: 
     print 'It Doesnt Exists' 
     return False 
return True 

Je regardai à la fonction builtin all, mais je ne peux pas vraiment voir comment appliquer que le scénario ci-dessus.

Des suggestions pour rendre cela plus pythonique?

Répondre

9
all(value in some_map for value in required_values) 
+0

belle merci – UberJumper

+0

de rien. – SilentGhost

+1

Note: ceci ne fonctionnera que pour les listes composées uniquement d'éléments lavables. Sinon, vous obtiendrez une exception TypeError lors de l'exécution de "valeur dans some_map" – Triptych

3
return set(required_values).issubset(set(some_map.keys())) 
+2

se trouve la recherche de clé dict avec "in" (dans la réponse acceptée) est beaucoup plus rapide que de récupérer le liste des clés et la convertir en un ensemble. –

0

essayer une compréhension de la liste:

retour ne Bool ([x pour x dans required_values ​​si x pas some_map.keys()]) (conversion bool pour plus de clarté)

ou return not [x pour x dans required_values ​​si x n'est pas dans some_map.keys()] (je pense que la plus pythonique)

L'instruction inside [] construit une liste de toutes les valeurs requises qui ne sont pas dans vos clés de carte si la liste est vide, elle est évaluée à False, sinon à True. Par conséquent, si la carte ne contient pas toutes les valeurs requises, au moins un élément figurera dans la liste créée par l'expression de compréhension de liste.

Cela va évaluer à True, donc nous annulons le résultat pour répondre à vos exigences de code (qui sont toutes les valeurs requises doivent être présents dans la carte)

Questions connexes