'Initialized with possible initial value and normalizing spec.
Initial values can be either a dictionary or an iterable of name/value
pairs. In the latter case items are added in the given order.
Normalizing spec has exact same semantics as with the :func:`normalize`
function.'

def __init__(self, initial=None, ignore=(), caseless=True, spaceless=True):

    self._data = {}
    self._keys = {}
    self._normalize = (lambda s: normalize(s, ignore, caseless, spaceless))
    if initial:
        self._add_initial(initial)
