できることは、スコアに基づいてプレーヤーの並べ替えられた配列を取得し、各プレーヤーの辞書を作成して別の配列に追加することです。おそらく次のようなものです(私は新しいリテラル構文を使用していますが、必要に応じて古いものを使用してください):
NSDictionary *scores = @{
    @"Stan" : @7500,
    @"Mark" : @5000,
    @"John" : @7500,
    @"Bill" : @10000
};
NSArray *sp = [scores keysSortedByValueUsingComparator:^(id obj1, id obj2){
    return [obj2 compare:obj1];
}];
NSMutableArray *players = [NSMutableArray arrayWithCapacity:0];
for (NSString *p in sp) [players addObject:@{ @"name":p, @"score":scores[p] }];
今、あなたのplayers配列は次のとおりです。
(
        {
        name = Bill;
        score = 10000;
    },
        {
        name = John;
        score = 7500;
    },
        {
        name = Stan;
        score = 7500;
    },
        {
        name = Mark;
        score = 5000;
    }
)
PS。キーがプレーヤー名である辞書を保持するのは良い考えではありません.2人の異なるJohnプレーヤーがいると考えてください...その場合はどうなりますか? また、より良い解決策は、Playerクラスを作成し、そのデータ (スコア、名前など) をプロパティとして保持することです。