From 16efc1a92e30e5f8a9ecc89edf0002db2425b3b4 Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Tue, 23 Feb 2010 00:08:03 +0000 Subject: [1.1.X] Fixed #12820. Implemented other dict methods for MergeDict. Backport of [12498] from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12501 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/utils/datastructures.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'django/utils/datastructures.py') diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py index adcc3546d0..af06bbef53 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.""" -- cgit v1.3