Да. Вот один из способов, но я бы не советовал:
{k: d.setdefault(k, []).append(pytesseract.image_to_string(i)) or d[k]
for d in [{}]
for k, i in ((i.split('_')[0], i) for i in names)}
Это может быть настолько чисто, насколько я могу это сделать, и все равно плохо. Лучше использовать обычный l oop, особенно чистый, как у Денниса.
Незначительные изменения (если я сделаю оскорбление один раз, я мог бы сделать это дважды):
{k: d.setdefault(k, []).append(pytesseract_image_to_string(i)) or d[k]
for d in [{}]
for i in names
for k in i.split('_')[:1]}
Редактировать: kaya3 теперь опубликовал хороший один, используя понимание dict. Я бы порекомендовал это и над моим. Мои, на самом деле, просто грязные результаты, которые я воспринимаю как «Кто-то сказал, что это невозможно сделать? Вызов принят!» .