iteritems() instead of materializing a (possibly giant) list of the
items.
def save_dict(self, object):
write = self.write
save = self.save
+ items = object.iteritems()
if self.bin:
write(EMPTY_DICT)
- else:
- write(MARK + DICT)
-
- self.memoize(object)
-
- using_setitems = (self.bin and (len(object) > 1))
+ self.memoize(object)
+ if len(object) > 1:
+ write(MARK)
+ for key, value in items:
+ save(key)
+ save(value)
+ write(SETITEMS)
+ return
- if using_setitems:
- write(MARK)
+ else: # proto 0 -- can't use EMPTY_DICT or SETITEMS
+ write(MARK + DICT)
+ self.memoize(object)
- items = object.items()
+ # proto 0 or len(object) < 2
for key, value in items:
save(key)
save(value)
-
- if not using_setitems:
- write(SETITEM)
-
- if using_setitems:
- write(SETITEMS)
+ write(SETITEM)
dispatch[DictionaryType] = save_dict
if not PyStringMap is None: