# users = queryset.values_list('group', 'username').distinct() users = [('admin', 'root'), ('group1', 'andy'), ('group1', 'tim')] grouped_users = reduce(lambda d, (k, v): dict(d, **{k: d.get(k, [])+[v]}), users, {}) print grouped_users # {'admin': ['root'], 'group1': ['andy', 'tim']} choices = map(lambda (k, v): (k, [('%s_%s' % (k, x), x) for x in v]), grouped_users.items()) print choices # [('admin', [('admin_root', 'root')]), ('group1', [('group1_andy', 'andy'), ('group1_tim', 'tim')])]