Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python 2.7 Counting number of dictionary items with given value

Tags:

first question here, so i will get right to it:

using python 2.7

I have a dictionary of items, the keys are an x,y coordinate represented as a tuple: (x,y) and all the values are Boolean values.

I am trying to figure out a quick and clean method of getting a count of how many items have a given value. I do NOT need to know which keys have the given value, just how many.

there is a similar post here: How many items in a dictionary share the same value in Python, however I do not need a dictionary returned, just an integer.

My first thought is to iterate over the items and test each one while keeping a count of each True value or something. I am just wondering, since I am still new to python and don't know all the libraries, if there is a better/faster/simpler way to do this.

thanks in advance.

like image 753
jguerra Avatar asked Nov 19 '12 21:11

jguerra


People also ask

How do you count the number of items in a dictionary Python?

Python dictionary method len() gives the total length of the dictionary. This would be equal to the number of items in the dictionary.

How would you determine the number of items in the following dictionary?

Use len() to count dictionary items The len() method returns the total length of a dictionary, or more precisely, the total number of items in the dictionary.

How do you determine the number of elements that are stored in a dictionary?

To find the number of elements stored in a dictionary we can use the len() function. To find the size of a dictionary in bytes we can use the getsizeof() function of the sys module. To count the elements of a nested dictionary, we can use a recursive function.

How do you sum a value in a dictionary Python?

It is pretty easy to get the sum of values of a python dictionary. You can first get the values in a list using the dict. values(). Then you can call the sum method to get the sum of these values.


2 Answers

This first part is mostly for fun -- I probably wouldn't use it in my code.

sum(d.values()) 

will get the number of True values. (Of course, you can get the number of False values by len(d) - sum(d.values())).


Slightly more generally, you can do something like:

sum(1 for x in d.values() if some_condition(x)) 

In this case, if x works just fine in place of if some_condition(x) and is what most people would use in real-world code)

OF THE THREE SOLUTIONS I HAVE POSTED HERE, THE ABOVE IS THE MOST IDIOMATIC AND IS THE ONE I WOULD RECOMMEND


Finally, I suppose this could be written a little more cleverly:

sum( x == chosen_value for x in d.values() ) 

This is in the same vein as my first (fun) solution as it relies on the fact that True + True == 2. Clever isn't always better. I think most people would consider this version to be a little more obscure than the one above (and therefore worse).

like image 117
mgilson Avatar answered Nov 08 '22 09:11

mgilson


If you want a data structure that you can quickly access to check the counts, you could try using a Counter (as @mgilson points out, this relies on the values themselves being hashable):

>>> from collections import Counter >>> d = {(1, 2): 2, (3, 1): 2, (4, 4): 1, (5, 6): 4} >>> Counter(d.values()) Counter({2: 2, 1: 1, 4: 1}) 

You could then plug in a value and get the number of times it appeared:

>>> c = Counter(d.values()) >>> c[2] 2 >>> c[4] 1 
like image 25
RocketDonkey Avatar answered Nov 08 '22 07:11

RocketDonkey