сделать данные
mat = {{"foobar", 77},
{"faabar", 81},
{"foobur", 22},
{"faabaa", 8},
{"faabian", 88},
{"foobar", 27},
{"fiijii", 52}};
lst = {"foo", "faa"};
теперь выберите
r1 = Select[mat, StringMatchQ[lst[[1]], StringTake[#[[1]], 3]] &];
r2 = Select[mat, StringMatchQ[lst[[2]], StringTake[#[[1]], 3]] &];
{{lst[[1]], Total@r1[[All, 2]]}, {lst[[2]], Total@r2[[All, 2]]}}
дает
{{"foo", 126}, {"faa", 177}}
Я постараюсь сделать его более функциональным / общим, если смогу...
edit (1)
Это ниже делает его более общим.(используя те же данные, что и выше):
foo[mat_, lst_] := Select[mat, StringMatchQ[lst, StringTake[#[[1]], 3]] &]
r = Map[foo[mat, #] &, lst];
MapThread[ {#1, Total[#2[[All, 2]]]} &, {lst, r}]
дает
{{"foo", 126}, {"faa", 177}}
Так что теперь тот же код выше будет работать, если lst был изменен на 3 элемента вместо 2:
lst = {"foo", "faa", "fii"};