Counting the number of distinct keys in a dictionary in Python

579,008

Solution 1

len(yourdict.keys())

or just

len(yourdict)

If you like to count unique words in the file, you could just use set and do like

len(set(open(yourdictfile).read().split()))

Solution 2

The number of distinct words (i.e. count of entries in the dictionary) can be found using the len() function.

> a = {'foo':42, 'bar':69}
> len(a)
2

To get all the distinct words (i.e. the keys), use the .keys() method.

> list(a.keys())
['foo', 'bar']

Solution 3

Calling len() directly on your dictionary works, and is faster than building an iterator, d.keys(), and calling len() on it, but the speed of either will negligible in comparison to whatever else your program is doing.

d = {x: x**2 for x in range(1000)}

len(d)
# 1000

len(d.keys())
# 1000

%timeit len(d)
# 41.9 ns ± 0.244 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit len(d.keys())
# 83.3 ns ± 0.41 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

Solution 4

If the question is about counting the number of keywords then would recommend something like

def countoccurrences(store, value):
    try:
        store[value] = store[value] + 1
    except KeyError as e:
        store[value] = 1
    return

in the main function have something that loops through the data and pass the values to countoccurrences function

if __name__ == "__main__":
    store = {}
    list = ('a', 'a', 'b', 'c', 'c')
    for data in list:
        countoccurrences(store, data)
    for k, v in store.iteritems():
        print "Key " + k + " has occurred "  + str(v) + " times"

The code outputs

Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times
Share:
579,008

Related videos on Youtube

Dan
Author by

Dan

Updated on April 28, 2021

Comments

  • Dan
    Dan about 3 years

    I have a a dictionary mapping keywords to the repetition of the keyword, but I only want a list of distinct words so I wanted to count the number of keywords. Is there a way to count the number of keywords or is there another way I should look for distinct words?

    • Flimm
      Flimm about 3 years
      The keys in a Python dictionary are already distinct from each other. You can't have the exact some keyword as a key twice in a Python dictionary. Therefore, counting the number of keys is the same as counting the number of distinct keys.
  • john_science
    john_science over 11 years
    I know this post is old, but I was curious. Is this the fastest method? Or: is it a reasonably fast method for large dictionaries?
  • Chih-Hsuan Yen
    Chih-Hsuan Yen about 8 years
    Both len(yourdict.keys()) and len(yourdict) are O(1). The latter is slightly faster. See my tests below.
  • ntk4
    ntk4 almost 8 years
    I'd like to note that you can also go for the values (I know the question didn't ask it) with len(yourdict.values())
  • Graham
    Graham almost 6 years
    PEP 8 naming conventions dictate that countoccurrences() should instead be count_occurrences(). Also, if you import collections.Counter, there's a much better way to do it: from collections import Counter; store = Counter(); for data in list: store[list] += 1.