@gtt your input is data type ‘product L0’, dimensioned by ‘list2’. Your output is data type ‘product L0’, dimensioned by ‘list1’. To get from list2 to list1, you have a common text property ‘name’.
Since it’s a text property, a comparison via IF is probably the most straightforward solution (and would work for both, dimension and transaction lists - but I wouldn’t do it in larger transaction lists I think).
IF(list1.name = list2.name, list2.product)[REMOVE LASTNONBLANK: list2]
If we talk about dimension lists (which we are probably not, given that you said non-unique list), you could also create additional properties, e.g. a ‘list2’ property in your list1, that would have a formula of
MATCH(list1.name, list2.name)
Then your formula for ‘product’ in list 1 could be
list1.list2.product
You could also do this in one step probably
MATCH(list1.name, list2.name).product