web-dev-qa-db-fra.com

Comment rechercher si la valeur du dictionnaire contient certaines chaînes avec Python

J'ai un dictionnaire avec une paire clé-valeur. Ma valeur contient des chaînes. Comment puis-je rechercher si une chaîne spécifique existe dans le dictionnaire et renvoyer la clé qui correspond à la clé qui contient la valeur.

Disons que je veux rechercher si la chaîne 'Mary' existe dans la valeur du dictionnaire et obtenir la clé qui la contient. C’est ce que j’ai essayé mais cela ne fonctionne évidemment pas de cette façon.

#Just an example how the dictionary may look like
myDict = {'age': ['12'], 'address': ['34 Main Street, 212 First Avenue'],
          'firstName': ['Alan', 'Mary-Ann'], 'lastName': ['Stone', 'Lee']}

#Checking if string 'Mary' exists in dictionary value
print 'Mary' in myDict.values()

Y a-t-il une meilleure façon de procéder car je souhaiterai peut-être rechercher une sous-chaîne de la valeur stockée ("Mary" est une sous-chaîne de la valeur "Mary-Ann").

11
Cryssie

Vous pouvez le faire comme ça:

#Just an example how the dictionary may look like
myDict = {'age': ['12'], 'address': ['34 Main Street, 212 First Avenue'],
      'firstName': ['Alan', 'Mary-Ann'], 'lastName': ['Stone', 'Lee']}

def search(values, searchFor):
    for k in values:
        for v in values[k]:
            if searchFor in v:
                return k
    return None

#Checking if string 'Mary' exists in dictionary value
print search(myDict, 'Mary') #prints firstName
30

La solution de Klaus a moins de frais généraux, par contre celle-ci peut être plus lisible

myDict = {'age': ['12'], 'address': ['34 Main Street, 212 First Avenue'],
          'firstName': ['Alan', 'Mary-Ann'], 'lastName': ['Stone', 'Lee']}

def search(myDict, lookup):
    for key, value in myDict.items():
        for v in value:
            if lookup in v:
                return key

search(myDict, 'Mary')
5
Moh Zah
import re
for i in range(len(myDict.values())):
     for j in range(len(myDict.values()[i])):
             match=re.search(r'Mary', myDict.values()[i][j])
             if match:
                     print match.group() #Mary
                     print myDict.keys()[i] #firstName
                     print myDict.values()[i][j] #Mary-Ann
4
rash

Pour moi, cela a également fonctionné:

def search(myDict, search1):
    search.a=[]
    for key, value in myDict.items():
        if search1 in value:
            search.a.append(key)

search(myDict, 'anyName')
print(search.a)
  • search.a rend la liste disponible globalement
  • si une correspondance de la sous-chaîne est trouvée dans une valeur, la clé de cette valeur sera ajoutée à un
2
Shushiro
>>> myDict
{'lastName': ['Stone', 'Lee'], 'age': ['12'], 'firstName': ['Alan', 'Mary-Ann'],
 'address': ['34 Main Street, 212 First Avenue']}

>>> Set = set()

>>> not ['' for Key, Values in myDict.items() for Value in Values if 'Mary' in Value and Set.add(Key)] and list(Set)
['firstName']
2
thefourtheye
def search(myDict, lookup):
    a=[]
    for key, value in myDict.items():
        for v in value:
            if lookup in v:
                 a.append(key)
    a=list(set(a))
    return a

si la recherche implique plus de clés, vous devriez peut-être créer une liste avec toutes les clés

0
Armando Sodano

Voici une ligne pour la réponse acceptée ... (pour les amoureux d'une ligne ..)

def search_dict(my_dict,searchFor):
    s_val = [[ k if searchFor in v else None for v in my_dict[k]] for k in my_dict]    
    return s_val
0
shantanu pathak
import re
for i in range(len(myDict.values())):
    for j in range(len(myDict.values()[i])):
         match=re.search(r'Mary', myDict.values()[i][j])
         if match:
                 print match.group() #Mary
                 print myDict.keys()[i] #firstName
                 print myDict.values()[i][j] #Mary-Ann
0
user2525447