Bring UserDict in-sync with changes to dict.

Constructor accepts optional keyword arguments after a optional items list.
Add fromkeys() as an alternate constructor from an iterable over keys.
Expand related unittests.
This commit is contained in:
Raymond Hettinger 2002-11-27 08:29:11 +00:00
parent e33d3df030
commit e4827eb2a2
2 changed files with 25 additions and 6 deletions

View file

@ -2,13 +2,13 @@
class UserDict:
def __init__(self, dict=None, **kwargs):
self.data = kwargs # defaults to {}
self.data = {}
if dict is not None:
if hasattr(dict,'keys'): # handle mapping (possibly a UserDict)
self.update(dict)
else: # handle sequence
DICT = type({}) # because builtin dict is locally overridden
self.data.update(DICT(dict))
if not hasattr(dict,'keys'):
dict = type({})(dict) # make mapping from a sequence
self.update(dict)
if len(kwargs):
self.update(kwargs)
def __repr__(self): return repr(self.data)
def __cmp__(self, dict):
if isinstance(dict, UserDict):
@ -61,6 +61,12 @@ class UserDict:
return self.data.popitem()
def __contains__(self, key):
return key in self.data
def fromkeys(cls, iterable, value=None):
d = cls()
for key in iterable:
d[key] = value
return d
fromkeys = classmethod(fromkeys)
class IterableUserDict(UserDict):
def __iter__(self):