defaultdict with deepcopy support
Project 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.
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, 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:
# 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.
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'])
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for defaultdict-NickNackGus-1.0.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 323264f95714ee0a6c4f2aae255e0199bea41cc1507a948850d90f3fd963865f |
|
MD5 | 1f6352ae4cf711e8a47f649f36ea1852 |
|
BLAKE2b-256 | d83451ccbb2caa6aa7bda7153fbe5c5a4b3f8451cb8c93480fcde28f0b0f6cde |
Close
Hashes for defaultdict_NickNackGus-1.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2f3cbaffc15df595ade7160651939eeab112647d1a2a0b72acf655c5f9a1cc1 |
|
MD5 | 485c106a1bcce043909475950642f4ee |
|
BLAKE2b-256 | d3be6aa0c0ffcfdf6777ad36ec82d52a613704ca707ba727cd69301b60a50458 |