Controleer of een gegeven sleutel al bestaat in een woordenboek

Ik wilde testen of een sleutel bestaat in een woordenboek alvorens de waarde voor de sleutel bij te werken. Ik schreef de volgende code:

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

Ik denk dat dit niet de beste manier is om deze taak uit te voeren. Is er een betere manier om te testen op een sleutel in het woordenboek?

Je hoeft geen sleutels te bellen:

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

Dat zal veel sneller zijn, omdat het de hashing van het woordenboek gebruikt in plaats van een lineaire zoekactie te doen, wat het aanroepen van sleutels zou doen.

Commentaren (13)

Je kunt dit inkorten:

if 'key1' in dict:
    ...

Dit is echter hooguit een cosmetische verbetering. Waarom denk je dat dit niet de beste manier is?

Commentaren (4)

Ik zou aanraden om in plaats daarvan de setdefault methode te gebruiken. Het klinkt alsof het alles zal doen wat je wilt.

>>> 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}
Commentaren (6)