2010-09-17 5 views
6
dict1=({"EMP$$1":1,"EMP$$2":2,"EMP$$3":3}) 

Comment vérifier si EMP existe dans le dictionnaire en utilisant pythonpour un motif clé dans un dictionnaire en python

dict1.get("EMP##") ?? 
+0

Il n'est pas tout à fait clair ce que vous essayez de faire. Pouvez-vous reformuler votre question? Fournir des exemples d'entrées et de sorties aiderait. –

Répondre

19

Ce que vous voulez faire n'est pas entièrement clair.

Vous pouvez parcourir les touches dans les dict touches de sélection à l'aide the startswith() method:

>>> for key in dict1: 
...  if key.startswith("EMP$$"): 
...   print "Found",key 
... 
Found EMP$$1 
Found EMP$$2 
Found EMP$$3 

Vous pouvez utiliser une compréhension de la liste pour obtenir toutes les valeurs qui correspondent à:

>>> [value for key,value in dict1.items() if key.startswith("EMP$$")] 
[1, 2, 3] 

Si vous voulez juste pour savoir si une clé correspond à vous, vous pouvez utiliser the any() function:

>>> any(key.startswith("EMP$$") for key in dict1) 
True 
+0

Je l'avais essayé comme dans votre premier exemple et j'ai mis un autre après, la condition de partie si semble être faux .... – Rajeev

+1

J'ai essayé cette approche et cela fonctionne comme l'auteur l'intention. Ajouter un autre fonctionne aussi pour moi. Quelle erreur obtenez vous? –

0

Il n'y a pas moyen de faire correspondre les clés de dictionnaire comme celui-ci. Je vous suggère de repenser votre structure de données pour ce problème. Si cela doit être très rapide, vous pouvez utiliser quelque chose comme un arbre de suffixe.

6

Cette approche me semble contraire à l'intention d'un dictionnaire.

Un dictionnaire est constitué de clés de hachage auxquelles des valeurs ont été associées. L'avantage de cette structure est qu'elle fournit des recherches très rapides (de l'ordre de O (1)). En cherchant dans les clés, vous annulez cet avantage.

Je vous suggère de réorganiser votre dictionnaire.

dict1 = {"EMP$$": {"1": 1, "2": 2, "3": 3} } 

Ensuite, trouver « EMP $$ » est aussi simple que

if "EMP$$" in dict1: 
    #etc... 
2

Vous devez être beaucoup plus précis avec ce que vous voulez faire. Cependant, en supposant que le dictionnaire que vous avez donné:

dict1={"EMP$$1":1, "EMP$$2":2, "EMP$$3":3} 

Si vous vouliez savoir si une clé spécifique était présent avant d'essayer de le demander, vous pouvez:

dict1.has_key('EMP$$1') 
True 

retours True comme dict1 a l'une EMP$$1 clé .

Vous pouvez également oublier la vérification des clés et compter sur la valeur de retour par défaut de dict1.get():

dict1.get('EMP$$5',0) 
0 

Retours 0 par défaut donné dict1 n'a pas une EMP$$5 clé.

De la même manière, vous pouvez également utiliser un `essayer/sauf/structure pour capturer et manipuler les touches manquées:

try: 
    dict1['EMP$$5'] 
except KeyError, e: 
    # Code to deal w key error 
    print 'Trapped key error in dict1 looking for %s' % e 

Les autres réponses à cette question sont également très bien, mais nous avons besoin de plus d'informations pour être plus précis.

+0

'.has_key' est obsolète – SilentGhost

+0

SilentGhost est correct. Utilisez le formulaire 'key in dict' plutôt que dict.has_key (clé). http://docs.python.org/library/stdtypes.html#dict.has_key –

+0

@SilentGhost - merci, je vais éliminer celui-là. – dtlussier

Questions connexes