pygame - кнопка удержания нажата

Я нашел решение заставить спрайт двигаться, когда вы удерживаете клавишу нажатой. Проблема в том, что это заставляет писать ужасно дублированный код. Текущее решение, которое я нашел:

       for event in pygame.event.get():
            if event.type == KEYDOWN:
                keystate = pygame.key.get_pressed()
                while keystate[K_RIGHT]:
                    screen.fill((255,255,255))
                    pygame.event.get()

                    for sprite in sprites:
                        rimage = sprite[1].getimage()

                        if sprite[2] is None:
                            x+=3
                            sprite[1].update(time)
                            screen.blit(rimage, (x,y))
                            if sprite[1].isfinished() == True:
                                sprite[1].reset()
                            last_dir = "right"
                            if x >= screen_width - rimage.get_width():
                                x = screen_width - rimage.get_width()

                    #update player sprite movement
                    #update player sprite animation
                    #update rest of game map

                    keystate = pygame.key.get_pressed()
                    time = pygame.time.get_ticks()


                    pygame.display.update()

Проблема в том, что блок while keystate. Это должно повторяться для каждого направления, и игровой мир должен обновляться в каждом блоке while. Это пять мест, где один и тот же код должен дублироваться .... 4 направления плюс, если клавиша не нажата. Я мог бы обернуть это в функцию, но мне было интересно, есть ли лучший способ справиться с удержанием кнопки в пигме.

Ответы на вопрос(3)

Ваш ответ на вопрос