score:1

Accepted answer

This should work:

Dictionary<string,List<object>> orig = ...
var res = Enumerable.Range(0, orig.Values.First().Count)
    .Select(
        i => orig.Aggregate(
            new Dictionary<string,object>()
        ,   (d, p) => { d[p.Key] = p.Value[i]; return d; }
        )
    ).ToList();

See a demo on ideone.

score:0

I'll just give you simpler alternative without the tricky usage of aggregate:

var target = Enumerable.Range(0, source.Values.First().Count)
                   .Select(i => source.ToDictionary(x => x.Key, x => x.Value[i]))
                   .ToList();

Related Articles