8

How can I go from

as =  {
    <|A->{1,11},B->{1,12},C->{1,13}|>,
    <|A->{2,21},B->{2,22},C->{2,23}|>,
    <|A->{3,31},B->{3,32},C->{3,33}|>
}

to

<|
     "A" -> {{1, 11}, {2, 21}, {3, 31}}, 
     "B" -> {{1, 12}, {2, 22}, {3, 32}}, 
     "C" -> {{1, 13}, {2, 23}, {3, 33}}
|>

I think I should use some variation of GroupBy[as,condition] but I can't really figure out what condition should be.

eldo
  • 67,911
  • 5
  • 60
  • 168
mete
  • 1,188
  • 5
  • 16

3 Answers3

15

This operation is performed by Merge:

Merge[as, Identity]
<|A -> {{1, 11}, {2, 21}, {3, 31}},
  B -> {{1, 12}, {2, 22}, {3, 32}}, 
  C -> {{1, 13}, {2, 23}, {3, 33}}|>
Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
9

Another approach:

AssociationThread[Keys[as][[1]], Transpose@Values[as]]
<|A -> {{1, 11}, {2, 21}, {3, 31}},
  B -> {{1, 12}, {2, 22}, {3, 32}}, 
  C -> {{1, 13}, {2, 23}, {3, 33}}|>
RunnyKine
  • 33,088
  • 3
  • 109
  • 176
3
GroupBy[Catenate @ Normal @ as, First -> Last]

enter image description here

eldo
  • 67,911
  • 5
  • 60
  • 168