it-swarm.com.de

So suchen Sie, ob der Wörterbuchwert bestimmte Zeichenfolgen mit Python enthält

Ich habe ein Wörterbuch mit einem Schlüsselwertpaar. Mein Wert enthält Zeichenfolgen. Wie kann ich nach einer bestimmten Zeichenfolge im Wörterbuch suchen und den Schlüssel zurückgeben, der dem Schlüssel entspricht, der den Wert enthält.

Angenommen, ich möchte suchen, ob die Zeichenfolge "Mary" im Wörterbuchwert vorhanden ist, und den Schlüssel abrufen, der ihn enthält. Das habe ich versucht, aber offensichtlich funktioniert es nicht so.

#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()

Gibt es eine bessere Möglichkeit, dies zu tun, da ich möglicherweise nach einem Teilstring des gespeicherten Werts suchen möchte ('Mary' ist ein Teilstring des Werts 'Mary-Ann').

11
Cryssie

Sie können es so machen:

#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

Klaus-Lösung hat weniger Aufwand, andererseits ist diese möglicherweise lesbarer

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

Für mich hat das auch funktioniert:

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 macht die Liste global verfügbar
  • wenn eine Übereinstimmung der Teilzeichenfolge in einem beliebigen Wert gefunden wird, wird der Schlüssel dieses Werts an einen
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

wenn die Suche mehr Schlüssel umfasst, sollten Sie eine Liste mit allen Schlüsseln erstellen

0
Armando Sodano

Im Folgenden finden Sie einen Liner für akzeptierte Antworten ... (für einen Linienliebhaber ..)

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