Skip to content

Commit ac2ae58

Browse files
committed
collections.defaultdict: Add implementation.
In a namespace package.
1 parent 813082a commit ac2ae58

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class defaultdict:
2+
3+
def __init__(self, default_factory=None, **kwargs):
4+
self.d = kwargs
5+
self.default_factory = default_factory
6+
7+
def __getitem__(self, key):
8+
try:
9+
return self.d[key]
10+
except KeyError:
11+
if self.default_factory is None:
12+
raise
13+
v = self.__missing__(key)
14+
self.d[key] = v
15+
return v
16+
17+
def __setitem__(self, key, v):
18+
self.d[key] = v
19+
20+
def __delitem__(self, key):
21+
del self.d[key]
22+
23+
def __missing__(self, key):
24+
return self.default_factory()

collections.defaultdict/setup.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from distutils.core import setup
2+
3+
setup(name='micropython-collections.defaultdict',
4+
version='0.1',
5+
description='collections.defaultdict module for MicroPython',
6+
url='https://github.com/micropython/micropython/issues/405',
7+
author='Paul Sokolovsky',
8+
author_email='[email protected]',
9+
license='MIT',
10+
packages=['collections'])
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from collections import defaultdict
2+
3+
d = defaultdict(lambda:42)
4+
assert d[1] == 42
5+
d[2] = 3
6+
assert d[2] == 3
7+
del d[1]
8+
assert d[1] == 42

0 commit comments

Comments
 (0)