diff --git a/normalize/diff.py b/normalize/diff.py
index <HASH>..<HASH> 100644
--- a/normalize/diff.py
+++ b/normalize/diff.py
@@ -484,6 +484,14 @@ def collection_generator(collection):
 
     elif hasattr(collection, "itertuples"):
         return collection.itertuples()
+    elif hasattr(collection, "keys"):
+
+        def generator():
+            for key in collection.keys():
+                yield (key, collection[key])
+
+    elif hasattr(collection, "items"):
+        return collection.items()
     elif hasattr(collection, "iteritems"):
         return collection.iteritems()
     elif hasattr(collection, "__getitem__"):
Be more pythonic when interpreting things as collections

This collection duck-typing protocol is different to what python does, eg
in the dict() constructor; do something similar to that, by detecting
'keys' and also 'items', not just 'iteritems'.