I would be inclined to restructure this slightly to avoid using the private `_terms` and to avoid calling the factory twice:

```
data = [(t.value, t.title or t.token) for t in factory(factory_context)
if not is instance(data[0][0], basestring):
    # Use IntDisplayList
```