python - Check if a given key already exists in a dictionary

ID : 249

viewed : 301

Tags : pythondictionarypython





Top 5 Answer for python - Check if a given key already exists in a dictionary

vote vote

98

in is the intended way to test for the existence of a key in a dict.

d = {"key1": 10, "key2": 23}  if "key1" in d:     print("this will execute")  if "nonexistent key" in d:     print("this will not") 

If you wanted a default, you can always use dict.get():

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

and if you wanted to always ensure a default value for any key you can either use dict.setdefault() repeatedly or defaultdict from the collections module, like so:

from collections import defaultdict  d = defaultdict(int)  for i in range(100):     d[i % 10] += 1 

but in general, the in keyword is the best way to do it.

vote vote

87

You don't have to call keys:

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

That will be much faster as it uses the dictionary's hashing as opposed to doing a linear search, which calling keys would do.

vote vote

76

You can test for the presence of a key in a dictionary, using the in keyword:

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

A common use for checking the existence of a key in a dictionary before mutating it is to default-initialize the value (e.g. if your values are lists, for example, and you want to ensure that there is an empty list to which you can append when inserting the first value for a key). In cases such as those, you may find the collections.defaultdict() type to be of interest.

In older code, you may also find some uses of has_key(), a deprecated method for checking the existence of keys in dictionaries (just use key_name in dict_name, instead).

vote vote

69

You can shorten your code to this:

if 'key1' in my_dict:     ... 

However, this is at best a cosmetic improvement. Why do you believe this is not the best way?

vote vote

52

For additional info on speed execution of the accepted answer's proposed methods (10m loops):

  • 'key' in mydict elapsed time 1.07 sec
  • mydict.get('key') elapsed time 1.84 sec
  • mydefaultdict['key'] elapsed time 1.07 sec

Therefore using in or defaultdict are recommended against get.

Top 3 video Explaining python - Check if a given key already exists in a dictionary







Related QUESTION?