Can Python's list comprehensions (ideally) do the equivalent of 'count(*)...group by...' in SQL?
Question: I think list comprehensions may give me this, but I'm not sure: any elegant
solutions in Python (2.6) in general for selecting unique objects in a list
and providing a count?

(I've defined an `__eq__` to define uniqueness on my object definition).

So in RDBMS-land, something like this:

    
    
    CREATE TABLE x(n NUMBER(1));
    INSERT INTO x VALUES(1);
    INSERT INTO x VALUES(1);
    INSERT INTO x VALUES(1);
    INSERT INTO x VALUES(2);
    
    SELECT COUNT(*), n FROM x
    GROUP BY n;
    

Which gives:

    
    
    COUNT(*) n
    ==========
    3        1
    1        2
    

So , here's my equivalent list in Python:

    
    
    [1,1,1,2]
    

And I want the same output as the SQL SELECT gives above.

EDIT: The example I gave here was simplified, I'm actually processing lists of
user-defined object-instances: just for completeness I include the extra code
I needed to get the whole thing to work:

    
    
    import hashlib
    
    def __hash__(self):
        md5=hashlib.md5()
        [md5.update(i) for i in self.my_list_of_stuff]
        return int(md5.hexdigest(),16)
    

The `__hash__` method was needed to get the `set` conversion to work (I opted
for the list-comprehension idea that works in 2.6 [despite the fact that I
learnt that involves an inefficiency (see comments) - my data set is small
enough for that not be an issue]). `my_list_of_stuff` above is a list of
(Strings) on my object definition.


Answer: 
    >>> from collections import Counter
    >>> Counter([1,1,1,2])
    Counter({1: 3, 2: 1})
    

[Counter](http://docs.python.org/3.1/library/collections.html#collections.Counter)
only available in py3.1, inherits from the `dict`.

