['a','a','b','c','c','c']
to
[2, 2, 1, 3, 3, 3]
and
{'a': 2, 'c': 3, 'b': 1}
['a','a','b','c','c','c']
to
[2, 2, 1, 3, 3, 3]
and
{'a': 2, 'c': 3, 'b': 1}
 
    
     
    
    >>> x=['a','a','b','c','c','c']
>>> map(x.count,x)
[2, 2, 1, 3, 3, 3]
>>> dict(zip(x,map(x.count,x)))
{'a': 2, 'c': 3, 'b': 1}
>>>
 
    
    This coding should give the result:
from collections import defaultdict
myDict = defaultdict(int)
for x in mylist:
  myDict[x] += 1
Of course if you want the list inbetween result, just get the values from the dict (mydict.values()).
 
    
    On Python ≥2.7 or ≥3.1, we have a built-in data structure collections.Counter to tally a list
>>> l = ['a','a','b','c','c','c']
>>> Counter(l)
Counter({'c': 3, 'a': 2, 'b': 1})
It is easy to build [2, 2, 1, 3, 3, 3] afterwards.
>>> c = _
>>> [c[i] for i in l]   # or map(c.__getitem__, l)
[2, 2, 1, 3, 3, 3]
 
    
    Use a set to only count each item once, use the list method count to count them, store them in a dict with the item as key and the occurrence is value.
l=["a","a","b","c","c","c"]
d={}
for i in set(l):
    d[i] = l.count(i)
print d
Output:
{'a': 2, 'c': 3, 'b': 1}
 
    
    a = ['a','a','b','c','c','c']
b = [a.count(x) for x in a]
c = dict(zip(a, b))
I've included Wim answer. Great idea
 
    
    Second one could be just
dict(zip(['a','a','b','c','c','c'], [2, 2, 1, 3, 3, 3]))
 
    
    d=defaultdict(int)
for i in list_to_be_counted: d[i]+=1
l = [d[i] for i in list_to_be_counted]
