Working with python collections part 2

Working with Counter:

        Counter is very useful in counting occurrences of hashable objects. The elements are stored as dictionary keys and counts are stored as dictionary values. 

Example:

    To count the frequency of a character in a given string.

    >>>  from counter import Counter
    >>>  str = "python is an easy to learn powerful programming language" 
    >>>  c = Counter(str.replace(' ', ''))
           Counter({'a': 6, 'n': 5, 'e': 4, 'g': 4, 'o': 4, 'r': 4, 'l': 3, 'p': 3, 'i': 2, 'm': 2, 's': 2, 'u': 2, 't': 2, 'y': 2, 'h': 1, 'f': 1, 'w': 1})

Initializing Counter:

     We can initialize counter in three ways.

    >>> import collections
    >>> collections.Counter(['a','b','c','d','e'])
        Counter({'a': 1, 'c': 1, 'b': 1, 'e': 1, 'd': 1})
    >>> collections.Counter({'a':2,'b':1,'c':-2,'d':2,'e':0})
        Counter({'a': 2, 'd': 2, 'b': 1, 'e': 0, 'c': -2})
    >>> collections.Counter(a=2,b=1,c=-2,d=2,e=0)
        Counter({'a': 2, 'd': 2, 'b': 1, 'e': 0, 'c': -2})

Creating and Updating Counters:

   >>> import collections
   >>> c = collections.Counter()              # initializing empty counter
   >>> c.update('xyzzzxy')                    # adding elements to empty counter or updating empty counter
   >>> c
       Counter({'z': 3, 'x': 2, 'y': 2})
   >>> c.update({'x': 1, 'z': -1})            # updating empty counter
   >>> c
       Counter({'x': 2, 'y': 2, 'z':2}

elements():

    This method is used to get the elements of counter

     >>> elements = list(c.elements())
            ['y', 'y', 'x', 'x', 'z', 'z', 'z']
    >>> set(elements)
          {'x', 'y', 'z'}

most_common([n]):

    This method is used to get the sequence of n most common elements and their respective counts.

    >>> collections.Counter('antidisestablishmentarianism')
           Counter({'i': 5, 'a': 4, 's': 4, 'n': 3, 't': 3, 'e': 2, 'm': 2, 'b': 1, 'd': 1, 'h': 1, 'l': 1, 'r': 1})
    >>> collections.Counter('antidisestablishmentarianism').most_common(3)
       [('i', 5), ('a', 4), ('s', 4)]

 we can also count the most_common lines in a file.

    >>> with open('filename', 'rb') as f:
        ...    line_count = Counter(f)
        ...    print line_count

Arithmetic Operations:

    >>> import collections
    >>> c1 = collections.Counter(['m', 'i', 'c', 'r', 'o', 'i', 'c', 'm', 'm'])
    >>> c2 = collections.Counter('micropyramid')
    >>> c1 + c2
         Counter({'m': 5, 'i': 4, 'c': 3, 'r': 3, 'o': 2, 'a': 1, 'd': 1, 'p': 1, 'y': 1})
    >>> c1 - c2
        Counter({'c': 1, 'm': 1})        # it will not show count zero elements
    >>> c1 & c2
        Counter({'i': 2, 'm': 2, 'c': 1, 'r': 1, 'o': 1})
    >>> c1 | c2
        Counter({'m': 3, 'c': 2, 'i': 2, 'r': 2, 'a': 1, 'd': 1, 'o': 1, 'p': 1, 'y': 1})

Working with OrderedDict:

        OrderedDict is the dictionary subclass which tracks the order of its contents in which they are added.

       The regular dictionary doesn't track the insertion order, rather it produces the values in an arbirary order.

    Regular Dictionary Example:

      >>> reg_dict = {}
      >>> reg_dict['x'] = 'X'
      >>> reg_dict['y'] = 'Y'
      >>> reg_dict['z'] = 'Z'
      >>> for k, v in reg_dict.items():
        ...     print k, v
     y Y
     x X
     z Z

      >>> reg_dict2 = {}
      >>> reg_dict2['Z'] = 'Z'
      >>> reg_dict2['y'] = 'Y'
      >>> reg_dict2['x'] = 'X'
      >>> reg_dict2 == reg_dict
        True

 Ordered Dictionary Example:

      >>> ord_dict = {}
      >>> ord_dict['x'] = 'X'
      >>> ord_dict['y'] = 'Y'
      >>> ord_dict['z'] = 'Z'
      >>> for k, v in ord_dict.items():
        ...     print k, v
     x X
     y Y
     z Z

      >>> ord_dict2 = {}
      >>> ord_dict2['Z'] = 'Z'
      >>> ord_dict2['y'] = 'Y'
      >>> ord_dict2['x'] = 'X'
         >>> ord_dict2 == ord_dict
         False

Sorting Dictionary by Key and Value:

   >>>  d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

   >>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))                       # sorting by Key 
          OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

   >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))                       # sorting by Value
         OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

Working with defaultdict:

     defaultdict is a dictionary, unlike regular dictionary defaultdict is initialized with a function called default_factory() it takes no arguments and provides the default value for nonexistent key.

     So there is no chance to get KeyError while using defaultdict, perticulary when we deal with nested lists inside a dictionary.

     example:

  >>> dict = {}
  >>> dict['colours']['favourite'] = 'red'
       KeyError: 'colours'

    to solve this problem we should use defaultdict

    >>> import collections
    >>> tree = lambda: collections.defaultdict(tree)
    >>> dict = tree()
    >>> dict['colours']['favourite'] = 'red'

to access this using json.dumps     

>>> import json
   >>> json.dumps(dict)
      '{"colours": {"favourite": "red"}}'
    By Posted On
SENIOR DEVELOPER at MICROPYRAMID

Need any Help in your Project?Let's Talk

Latest Comments
Related Articles
Working with python collections part 1 Rakesh babu Podishetty

Python Collections - named tuple is to access by the names specified and deque is to append and pop the elements from both sides of ...

Continue Reading...
WSGI explanation with simple APP Ravi Kumar Gadila

The main goal of WSGI is to facilitate easy interconnection of servers and web frameworks/applications. WSGI defines a standerd API for web servers(uWSGI, Twisted, Gunicorn) ...

Continue Reading...
Vim for Python Web Development Ashwin Kumar

Having a good environment setup is important for effective, fast and easy coding. We have different IDE's like eclipse, pycharm, sublime etc.. which are powerful ...

Continue Reading...

Subscribe To our news letter

Free news and articles on Django, Python, Machine Learning, Amazon Web Services, DevOps, Salesforce, ReactJS, AngularJS, React Native.
*We don't provide your email contact details to any third parties