Metadata-Version: 1.0
Name: nested-dict
Version: 1.0.2
Summary: Defaultdict extension for dictionaries with multiple levels of nesting
Home-page: UNKNOWN
Author: Leo Goodstadt
Author-email: pypi@llew.org.uk
License: Boost
Description: 
        ***************************************
        Overview
        ***************************************
        `collections.defaultdict <http://docs.python.org/library/collections.html#defaultdict-objects>`_ allows dictionaries to be created with default values.
        
        For example, a dictionary of sets::
        
        from collections import defaultdict
        
        dd = defaultdict(set)
        
        dd["1st group"].add(3)
        dd["2nd group"].add(5)
        dd["2nd group"].add(8)
        dd["1st group"].add(4)
        dd["2nd group"].add(5)
        
        print dict(dd)
        
        gives::
        
        {'1st group': set([3, 4]), '2nd group': set([8, 5])})
        
        This module extends this to dictionaries with more than one level of nesting::
        
        from nested_dict import *
        
        nd = nested_dict()
        
        nd["a"]["b"]["c"] = 311
        nd["d"]["e"] = 311
        
        Each nested level is create magically when accessed, a process known as
        `"auto-vivification" <http://en.wikipedia.org/wiki/Autovivification>`_ in perl.
        
        
        
        *********************************
        How to use nested_dict:
        *********************************
        
        ==================================
        "Auto-vivifying" nested dict
        ==================================
        ::
        
        nd= nested_dict()
        nd["mouse"]["chr1"]["+"] = 311
        nd["mouse"]["chromosomes"]="completed"
        nd["mouse"]["chr2"] = "2nd longest"
        nd["mouse"]["chr3"] = "3rd longest"
        
        for k, v in nd.iteritems_flat():
        print "%-30s=-%20s" % (k,v)
        
        Gives::
        
        ('mouse', 'chr3')             =-         3rd longest
        ('mouse', 'chromosomes')      =-           completed
        ('mouse', 'chr2')             =-         2nd longest
        ('mouse', 'chr1', '+')        =-                 311
        
        ====================================================================
        Specifying the autovivified object
        ====================================================================
        If you wish the nested dictionary to hold a collection rather than a scalar,
        you have to write::
        
        nd["mouse"]["chr2"] = list()
        nd["mouse"]["chr2"].append(12)
        
        or::
        
        nd["mouse"]["chr2"] = set()
        nd["mouse"]["chr2"].add(84)
        
        Which doesn't seem very "auto" at all!
        
        Instead, specify the collection in the constructor of nested_dict::
        
        # two levels of nesting
        nd2 = nested_dict(2, list)
        nd2["mouse"]["chr2"].append(12)
        
        # three levels of nesting
        nd3 = nested_dict(3, set)
        nd3["mouse"]["chr2"]["categorised"].add(3)
        
        # counts
        nd4 = nested_dict(2, int)
        nd4["mouse"]["chr2"]+=4
        nd4["human"]["chr1"]+=3
        nd4["human"]["chr3"]+=4
        
        
Keywords: make task pipeline parallel bioinformatics science
Platform: UNKNOWN
Classifier: Intended Audience :: End Users/Desktop
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved
Classifier: Programming Language :: Python
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries
