Metadata-Version: 2.1
Name: defaultdict-NickNackGus
Version: 1.0.1
Summary: defaultdict with deepcopy support
Home-page: https://github.com/NickNackGus/pydefaultdict
Author: NickNackGus
Author-email: NickNackGus@gmail.com
License: UNKNOWN
Description: # DefaultDict
        
        This is a package for a defaultdict that deep copies its default value.
        
        This can be used to implement a simple counter object, similar to the example code this is based on.
        
        ```python
        counter = DefaultDict()
        
        for item in ['spam', 'egg', 'spam', 'spam', 'bacon', 'spam']:
            counter[item] += 1
        
        print("Menu contents:")
        for item in counter:
            print("  {}x {}".format(counter[item], item))
        ```
        
        Output:
        ```
        Menu contents:
          1x bacon
          1x egg
          4x spam
        ```
        
        Unlike [collections.defaultdict](https://docs.python.org/3/library/collections.html#collections.defaultdict), the default value is an object - not a factory. This allows for easier creation of nested data structures. For example, the following is valid and encouraged:
        
        ```python
        # shapes_by_color[color][shape] = count
        shapes_by_color = DefaultDict(
            default=DefaultDict(
                {'total': 0},
                default=0
            )
        )
        
        with open('test/shapes.log', 'r') as fp:
            for line in fp:
                color, shape = line.split()
                shapes_by_color[color][shape] += 1
                shapes_by_color[color]['total'] += 1
        
        for color, shapes in shapes_by_color.items():
            print("{}:".format(color))
            for shape, count in shapes.items():
                if shape == 'total':
                    continue
                print("  {}x {}".format(count, shape))
            print("  Total: {}".format(count))
        ```
        
        Output:
        ```
        green:
          2x triangle
          1x circle
          Total: 3
        red:
          1x octagon
          2x rhombus
          Total: 3
        blue:
          1x triangle
          1x square
          Total: 2
        ```
        
        Note that the default value is a reference, and is affected by external changes. This only affects new uses of the default value, not previous uses.
        ```python
        spam = DefaultDict(default=['Hello'])
        print(spam['eggs'])
        
        spam.default.append('world')
        print(spam['sausage'])
        
        print(spam)
        ```
        
        Output:
        ```
        ['Hello']
        ['Hello', 'world']
        DictWithDefault(init={'sausage': ['Hello', 'world'], 'eggs': ['Hello']}, default=['Hello', 'world'])
        ```
        
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
