Build JuMP variable from array of tuples

You could use anonymous variables in a regular Julia Dict:

julia> using JuMP

julia> m = Model();

julia> A = [(:a1,:b1),(:a2,:b2)];

julia> x = Dict((i, j) => @variable(m, basename = "x[$(string(i)),$(string(j))]") for (i, j) in A)
Dict{Tuple{Symbol,Symbol},JuMP.Variable} with 2 entries:
  (:a2, :b2) => x[a2,b2]
  (:a1, :b1) => x[a1,b1]

julia> x[:a1, :b1]
x[a1,b1]