suchen - python list in dictionary




Prüfen Sie, ob ein bestimmter Schlüssel in einem Wörterbuch bereits vorhanden ist (13)

Am einfachsten ist es, wenn Sie wissen, nach welchem ​​Schlüssel (Schlüsselname) gesucht werden soll:

# suppose your dictionary is
my_dict = {'foo': 1, 'bar': 2}
# check if a key is there
if 'key' in my_dict.keys():   # it will evaluates to true if that key is present otherwise false.
    # do something

oder auch einfach als:

if 'key' in my_dict:   # it will evaluates to true if that key is present otherwise false.
    # do something

Ich wollte testen, ob ein Schlüssel in einem Wörterbuch vorhanden ist, bevor der Wert für den Schlüssel aktualisiert wird. Ich habe folgenden Code geschrieben:

if 'key1' in dict.keys():
  print "blah"
else:
  print "boo"

Ich denke, das ist nicht der beste Weg, um diese Aufgabe zu lösen. Gibt es eine bessere Möglichkeit, im Wörterbuch nach einem Schlüssel zu suchen?


Das Python-Wörterbuch hat die Methode __contains__ . Diese Methode gibt True zurück, wenn das Wörterbuch den Schlüssel enthält. Andernfalls wird False zurückgegeben.

 >>> temp = {}

 >>> help(temp.__contains__)

Help on built-in function __contains__:

__contains__(key, /) method of builtins.dict instance
    True if D has a key k, else False.

Ich benutze das try / außer ; Wenn eine Ausnahme ausgelöst wird, ist der Schlüssel nicht im Wörterbuch vorhanden. Beispiel:

st = 'sdhfjaks'
d = {}
try:
    print d['st']
except Exception, e:
    print 'Key not in the dictionary'

Ich würde empfehlen, stattdessen die Methode setdefault verwenden. Es klingt als würde es alles tun, was Sie wollen.

>>> d = {'foo':'bar'}
>>> q = d.setdefault('foo','baz') #Do not override the existing key
>>> print q #The value takes what was originally in the dictionary
bar
>>> print d
{'foo': 'bar'}
>>> r = d.setdefault('baz',18) #baz was never in the dictionary
>>> print r #Now r has the value supplied above
18
>>> print d #The dictionary's been updated
{'foo': 'bar', 'baz': 18}

Nur eine FYI, die Chris hinzufügt. B (beste Antwort):

d = defaultdict(int)

Funktioniert auch Der Grund ist, dass der Aufruf von int() 0 zurückgibt, was defaultdict hinter den Kulissen tut (beim defaultdict eines Wörterbuchs), daher der Name "Factory Function" in der Dokumentation.


Sie können das Vorhandensein eines Schlüssels in einem Wörterbuch mit dem Schlüsselwort in prüfen:

d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False

Um die Existenz eines Schlüssels in einem Wörterbuch vor der Mutation zu überprüfen, wird der Wert standardmäßig vorbelegt (z. B. wenn es sich bei Ihren Werten um Listen handelt und Sie sicherstellen möchten, dass eine leere Liste vorhanden ist, an die Sie anhängen können beim Einfügen des ersten Wertes für einen Schlüssel). In solchen Fällen kann es vorkommen, dass der Typ collections.defaultdict() von Interesse ist.

In älterem Code finden Sie möglicherweise auch Verwendung von has_key() , einer veralteten Methode zum Überprüfen der Existenz von Schlüsseln in Wörterbüchern (verwenden key_name in dict_name stattdessen key_name in dict_name ).


Sie müssen keine Tasten anrufen:

if 'key1' in dict:
  print "blah"
else:
  print "boo"

Das wird viel faster da es das Hashing des Wörterbuchs verwendet, im Gegensatz zu einer linearen Suche, die aufrufende Schlüssel ausführen würden.


Verwenden des ternären Operators:

message = "blah" if 'key1' in dict else "booh"
print(message)


Weitere Informationen zur Geschwindigkeitsausführung der vorgeschlagenen Antwortmethoden (10m-Schleifen):

  • 'key' in mydict verstrichene Zeit 1,07 Sek
  • mydict.get('key') verstrichene Zeit 1,84 sek
  • mydefaultdict['key'] verstrichene Zeit 1,07 Sek

Daher wird die Verwendung von in oder defaultdict gegen get empfohlen.


in ist der beabsichtigte Weg, um das Vorhandensein eines Schlüssels in einem dict zu testen.

d = dict()

for i in xrange(100):
    key = i % 10
    if key in d:
        d[key] += 1
    else:
        d[key] = 1

Wenn Sie einen Standard dict.get() , können Sie dict.get() immer verwenden:

d = dict()

for i in xrange(100):
    key = i % 10
    d[key] = d.get(key, 0) + 1

... und wenn Sie immer einen Standardwert für einen Schlüssel sicherstellen defaultdict können Sie defaultdict aus dem collections Modul verwenden, z.

from collections import defaultdict

d = defaultdict(lambda: 0)

for i in xrange(100):
    d[i % 10] += 1

... aber in der Regel ist das in Schlüsselwort der beste Weg.


print dict.get('key1', 'blah')

Es wird kein Buch für die Werte im Dikt gedruckt, sondern das Ziel erreicht, indem stattdessen der Wert von key1 gedruckt wird, um dessen Vorhandensein zu bestätigen.


Sie können die Methode has_key () verwenden:

if dict.has_key('xyz')==1:
    #update the value for the key
else:
    pass

Oder die dict.get Methode zum dict.get eines Standardwerts, falls nicht gefunden:

mydict = {"a": 5}

print mydict["a"]            #prints 5
print mydict["b"]            #Throws KeyError: 'b'

print mydict.get("a", 0)     #prints 5
print mydict.get("b", 0)     #prints 0






dictionary