def getall(self, key, default=_marker): """Return a list of all values matching the key."""
identity = self._title(key)
res = [v for i, k, v in self._impl._items if i == identity] if res: return res ifnot res and default isnot _marker: return default raise KeyError("Key not found: %r" % key)
def getone(self, key, default=_marker): """Get first value matching the key.
Raises KeyError if the key isnot found and no default is provided. """
identity = self._title(key) for i, k, v in self._impl._items: if i == identity: return v if default isnot _marker: return default raise KeyError("Key not found: %r" % key)
def __delitem__(self, key):
identity = self._title(key)
items = self._impl._items
found = False for i in range(len(items) - 1, -1, -1): if items[i][0] == identity: del items[i]
found = True ifnot found: raise KeyError(key) else:
self._impl.incr_version()
def setdefault(self, key, default=None): """Return value for key, set value to default if key is not present."""
identity = self._title(key) for i, k, v in self._impl._items: if i == identity: return v
self.add(key, default) return default
def popone(self, key, default=_marker): """Remove specified key and return the corresponding value.
If key isnot found, d is returned if given, otherwise
KeyError is raised.
"""
identity = self._title(key) for i in range(len(self._impl._items)): if self._impl._items[i][0] == identity:
value = self._impl._items[i][2] del self._impl._items[i]
self._impl.incr_version() return value if default is _marker: raise KeyError(key) else: return default
pop = popone # type: ignore
def popall(self, key, default=_marker): """Remove all occurrences of key and return the list of corresponding
values.
If key isnot found, default is returned if given, otherwise
KeyError is raised.
"""
found = False
identity = self._title(key)
ret = [] for i in range(len(self._impl._items) - 1, -1, -1):
item = self._impl._items[i] if item[0] == identity:
ret.append(item[2]) del self._impl._items[i]
self._impl.incr_version()
found = True ifnot found: if default is _marker: raise KeyError(key) else: return default else:
ret.reverse() return ret
def popitem(self): """Remove and return an arbitrary (key, value) pair.""" if self._impl._items:
i = self._impl._items.pop(0)
self._impl.incr_version() return i[1], i[2] else: raise KeyError("empty multidict")
def update(self, *args, **kwargs): """Update the dictionary from *other*, overwriting existing keys."""
self._extend(args, kwargs, "update", self._update_items)
def _update_items(self, items): ifnot items: return
used_keys = {} for identity, key, value in items:
start = used_keys.get(identity, 0) for i in range(start, len(self._impl._items)):
item = self._impl._items[i] if item[0] == identity:
used_keys[identity] = i + 1
self._impl._items[i] = (identity, key, value) break else:
self._impl._items.append((identity, key, value))
used_keys[identity] = len(self._impl._items)
# drop tails
i = 0 while i < len(self._impl._items):
item = self._impl._items[i]
identity = item[0]
pos = used_keys.get(identity) if pos isNone:
i += 1 continue if i >= pos: del self._impl._items[i] else:
i += 1
for i in range(len(items)):
item = items[i] if item[0] == identity:
items[i] = (identity, key, value) # i points to last found item
rgt = i
self._impl.incr_version() break else:
self._impl._items.append((identity, key, value))
self._impl.incr_version() return
# remove all tail items
i = rgt + 1 while i < len(items):
item = items[i] if item[0] == identity: del items[i] else:
i += 1
class CIMultiDict(MultiDict): """Dictionary with the support for duplicate case-insensitive keys."""
class _ViewBase: def __init__(self, impl):
self._impl = impl
def __len__(self): return len(self._impl._items)
class _ItemsView(_ViewBase, abc.ItemsView): def __contains__(self, item): assert isinstance(item, tuple) or isinstance(item, list) assert len(item) == 2 for i, k, v in self._impl._items: if item[0] == k and item[1] == v: returnTrue returnFalse
def _iter(self, version): for i, k, v in self._impl._items: if version != self._impl._version: raise RuntimeError("Dictionary changed during iteration") yield k, v
def __repr__(self):
lst = [] for item in self._impl._items:
lst.append("{!r}: {!r}".format(item[1], item[2]))
body = ", ".join(lst) return"{}({})".format(self.__class__.__name__, body)
class _ValuesView(_ViewBase, abc.ValuesView): def __contains__(self, value): for item in self._impl._items: if item[2] == value: returnTrue returnFalse
def _iter(self, version): for item in self._impl._items: if version != self._impl._version: raise RuntimeError("Dictionary changed during iteration") yield item[2]
def __repr__(self):
lst = [] for item in self._impl._items:
lst.append("{!r}".format(item[2]))
body = ", ".join(lst) return"{}({})".format(self.__class__.__name__, body)
class _KeysView(_ViewBase, abc.KeysView): def __contains__(self, key): for item in self._impl._items: if item[1] == key: returnTrue returnFalse
def _iter(self, version): for item in self._impl._items: if version != self._impl._version: raise RuntimeError("Dictionary changed during iteration") yield item[1]
def __repr__(self):
lst = [] for item in self._impl._items:
lst.append("{!r}".format(item[1]))
body = ", ".join(lst) return"{}({})".format(self.__class__.__name__, body)
¤ Dauer der Verarbeitung: 0.30 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.