diff options
Diffstat (limited to 'django/utils/datastructures.py')
-rw-r--r-- | django/utils/datastructures.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py index d6fc9dc56f..3cbbe27b91 100644 --- a/django/utils/datastructures.py +++ b/django/utils/datastructures.py @@ -37,11 +37,32 @@ class MergeDict(object): return dict_.getlist(key) return [] - def items(self): - item_list = [] + def iteritems(self): + seen = set() for dict_ in self.dicts: - item_list.extend(dict_.items()) - return item_list + for item in dict_.iteritems(): + k, v = item + if k in seen: + continue + seen.add(k) + yield item + + def iterkeys(self): + for k, v in self.iteritems(): + yield k + + def itervalues(self): + for k, v in self.iteritems(): + yield v + + def items(self): + return list(self.iteritems()) + + def keys(self): + return list(self.iterkeys()) + + def values(self): + return list(self.itervalues()) def has_key(self, key): for dict_ in self.dicts: @@ -50,6 +71,7 @@ class MergeDict(object): return False __contains__ = has_key + __iter__ = iterkeys def copy(self): """Returns a copy of this object.""" |