I’m not sure I understand what the expected result is, but I try
[ (person,pair)=>person_values(person,pair...) for (person,pair) in Iterators.product(Persons,Pairs)][:]
18-element Vector{Pair{Tuple{Char, Tuple{Int64, Int64}}}}:
('p', (1, 2)) => 2.5
('q', (1, 2)) => 2.5
('p', (1, 7)) => 4.1
('q', (1, 7)) => nothing
('p', (2, 3)) => 7.4
('q', (2, 3)) => 7.4
('p', (2, 5)) => nothing
('q', (2, 5)) => 5.6
('p', (3, 4)) => nothing
('q', (3, 4)) => nothing
('p', (3, 5)) => nothing
('q', (3, 5)) => nothing
('p', (4, 1)) => nothing
('q', (4, 1)) => nothing
('p', (4, 5)) => nothing
('q', (4, 5)) => nothing
('p', (5, 2)) => nothing
('q', (5, 2)) => 3.2
#or, if you prefere
julia> [ (person,pair...)=>person_values(person,pair...) for (person,pair) in
Iterators.product(Persons,Pairs)][:]
18-element Vector{Pair{Tuple{Char, Int64, Int64}}}:
('p', 1, 2) => 2.5
('q', 1, 2) => 2.5
('p', 1, 7) => 4.1
('q', 1, 7) => nothing
('p', 2, 3) => 7.4
('q', 2, 3) => 7.4
('p', 2, 5) => nothing
('q', 2, 5) => 5.6
('p', 3, 4) => nothing
('q', 3, 4) => nothing
('p', 3, 5) => nothing
('q', 3, 5) => nothing
('p', 4, 1) => nothing
('q', 4, 1) => nothing
('p', 4, 5) => nothing
('q', 4, 5) => nothing
('p', 5, 2) => nothing
('q', 5, 2) => 3.2