Python shuffle the middle letters in all the words of a sentence
The fact that Python allows fitting things on a single line and pack in comprehensions, does not mean you need to try to squash the code to be shorter hurting readability. I would probably at least expand the code into multiple lines with descriptive variable names.

Here is, though, an alternative solution based on regular expression replacement function:

from random import shuffle
import re


RE_GARBLE = re.compile(r"\b(\w)(\w+)(\w)\b")


def garble_word(match):
    first, middle, last = match.groups()

    middle = list(middle)
    shuffle(middle)

    return first + ''.join(middle) + last


def garble(sentence):
    return RE_GARBLE.sub(garble_word, sentence)