I thought it was intentional to keep urlencode compat.
I used to solve it like this:
vars = (('a',1), ('b',2), ('b',3))
> There was a fix a little while back, I think, to handle this for incoming
> URLs. Sometimes a key appears more than once in a URL query string, like this:
>
> http://domain.com/a/b/c?a=1&b=2&b=3
>
> A typical place this happens is for form checkboxes, where the same key
> (associated with the group of checkboxes) gets sent once for each box that's
> checked.
>
> This shows up in request.vars as a list, so the above ends up being something
> like:
>
> vars = dict(a=1, b=[2,3])
>
> ...except that they're strings.
>
> The problem was that this wasn't being handled for outgoing URLs (in URL()),
> so if you tried to send the example above you'd get something like:
>
> http://domain.com/a/b/c?a=1&b=[2, 3]
>
> ...which isn't right. The fix is to generate a URL that looks like the first
> example above.
>
> This fix is also incorporated into the recent hmac signature checking of
> immutable vars.