Keeping a dictionary of treerowreferences is the way to go. It makes keeping track of rows a breeze. You don’t have to worry about row locations changing over time as the treerowref keeps track of that automatically.
When you add a parent row to a treestore you get an iterator returned. Use that to get the path of your newly added row and combine the path with the model to get the row reference. You only need to do this once.
x = 'track-me'
self.rowref = {}
titer = treestore.append(None, [x, 'Unknown', None, None, 0]
path = treestore.get_path(titer)
self.rowref[x] = gtk.TreeRowReference(treestore, path)
it = treestore.get_iter_first()
while it:
if x == treestore.get_value(it, 0):
titer = it
it = treestore.iter_next(it)
titer = treestore.get_iter(self.rowref[x].get_path())