Make things a bit lazier
diff --git a/pyfontview.py b/pyfontview.py
index 5fc9f73..50693c4 100755
--- a/pyfontview.py
+++ b/pyfontview.py
@@ -103,7 +103,6 @@
 	def _add_dict(self, key, value):
 		self._value_str = '%s of %d items' % (value.__class__.__name__, len(value))
 		self._items = sorted(value.items())
-		self._filter_items()
 
 	def _add_list(self, key, value):
 		if len(value) and len(value) <= 32:
@@ -111,12 +110,14 @@
 		else:
 			self._value_str = '%s of %d items' % (value.__class__.__name__,
 							      len(value))
-		self._items = enumerate(value)
-		self._filter_items()
+		self._items = list(enumerate(value))
 
 	def __len__(self):
-		self._ensure_children()
-		return len(self._children)
+		if hasattr(self, '_children'):
+			return len(self._children)
+		if hasattr(self, '_items'):
+			return len(self._items)
+		assert 0
 
 	def _ensure_children(self):
 		if hasattr(self, '_children'):
@@ -128,11 +129,16 @@
 		del self._items
 
 	def __getitem__(self, n):
-		self._ensure_children()
-		if n < len(self._children):
-			return self._children[n]
-		else:
+		if n >= len(self):
 			return None
+		if not hasattr(self, '_children'):
+			self._children = [None] * len(self)
+		c = self._children[n]
+		if c is None:
+			k,v = self._items[n]
+			c = self._children[n] = Row(self, n, k, v)
+			self._items[n] = None
+		return c
 
 	def get_parent(self):
 		return self._parent