def seqvalues(d, seqtype=list): #{{{ if not ismapping(d): raise TypeError("%s is not a valid mapping object" %d.__class__.__name__) elif isinstance(d, MultiDictMixin): return dict(d) else: return dict((k, seqtype([v])) for k, v in d.iteritems())
def update(self, *args, **kw): """ Updates the dictionary with the keys and values of newdict. @param self: Instance of this class. Default Value: n/a @type self: odict instance @param newdict: Instance of a dictionary object. @type self: L{Dictionary<dict>} @precondition: Anything goes. @postcondition: keys and values of this class are equal to those of C{newdict}. """ new = {} setitem = self.__setitem__ if args: largs = len(args) if largs > 1: raise TypeError('odict expected at most 1 arguments, got %i' %largs) args = args[0] seq = args.iteritems() if ismapping(args) else iter(args) for k, v in seq: setitem(k, v) if kw: for k, v in kw.iteritems(): setitem(k, v)
def update(self, s): #{{{ if ismapping(s): s = s.iteritems() def set_mapping(init): #{{{ for item in init: try: obj, count = item except (ValueError, TypeError): obj, count = item, self.get(item, 0) + 1 cur = count else: cur = self.get(obj, 1) try: count = int(count) except (TypeError, ValueError): count = cur else: if not count: self.pop(obj, 0) continue elif count < 0: raise ValueError("Invalid count of %i for %s object" %(count, obj.__class__.__name__)) yield obj, count # End def #}}} super(multiset, self).update(set_mapping(s))
def mixedvalues(d, seqtype=list): #{{{ if not ismapping(d): raise TypeError("%s is not a valid mapping object" %d.__class__.__name__) elif isinstance(d, MultiDictMixin): getall = d.getall def mkval(k): #{{{ vals = getall(k) return seqtype(vals) if len(vals) > 1 else vals[0] # End def #}}} return dict((k, mkval(k)) for k in d) else: return dict(d)
def update(self, *args, **kw): #{{{ new = {} setitem = self.__setitem__ if args: largs = len(args) if largs > 1: raise TypeError('odict expected at most 1 arguments, got %i' %largs) args = args[0] seq = args.iteritems() if ismapping(args) else iter(args) for k, v in seq: setitem(k, v) if kw: for k, v in kw.iteritems(): setitem(k, v)
def merge(self, *args, **kwargs): #{{{ alldict = [] adapp = alldict.append for a in args: if not ismapping(a): a = [(k, v) for k, v in a] if a: adapp(a) if kwargs: adapp(kwargs) if not alldict: return update = super(MergeDictMixin, self).update for d in alldict: update(d) self._alldict.extend(alldict)
def merge(self, *args, **kwargs): #{{{ alldict = [] for a in args: if not ismapping(a): a = dict(a) alldict.append(a) if kwargs: alldict.append(kwargs) if not alldict: return for d in alldict: super(mdict, self).update(d) sall = getattr(self, '_alldict', None) if sall is None: self._alldict = sall = [] sall.extend(alldict)