Mon algo est peut-être simplifiable, mais ta proposition ne fonctionne pas car on ne peut pas toujours se baser sur les clés. Elles ne sont pas forcément associatives.
Du coup il faut aussi trier les valeurs.

Par exemple :

    'clip' => [
        'ConsistentRead' => false,
        'Keys' => [
            [
                'code' => ['S' => 'abcd'],
                'id'   => ['N' => 1234],
            ],
            [
                'code' => ['S' => 'efgh'],
                'id'   => ['N' => 5678]
            ],
        ],
        'AttributesToGet' => ['id', 'code'],
    ]

Pour la clé "Keys", un ksort ne fonctionnera pas car si tu inverses les deux éléments, il n'y verra que du feu.