如何把纵向压缩的字典列表转换成横向压缩?

现有数万个包含压缩数据字典的顺序一维列表,宽高固定:
格式如下:

[
{'data1': 'a', 'rle': 1}, {'data3': 'b', 'rle': 3},
{'data1': 'a', 'rle': 2}, {'data3': 'c', 'rle': 2},
{'data3': 'c', 'rle': 3}, {'data2': 'b', 'rle': 1},
]

rle对应的即为压缩数据,意思是有多少个相同数据。但其现在是横向(或纵向)压缩,我想反过来,变成纵向(或横向)压缩。
我写了下面的代码:

def matrix():
import numpy as np
from collections import deque
tiles_list =     [
{'data1': 'a', 'rle': 1}, {'data3': 'b', 'rle': 3},
{'data1': 'a', 'rle': 2}, {'data3': 'c', 'rle': 2},
{'data3': 'c', 'rle': 3}, {'data2': 'b', 'rle': 1},
]
height, width = 4, 3
data = deque()
tile_count = 0 # 计算所有方块是否够一列
temp_list = deque()
for tile_dict in tiles_list:
    count = tile_dict.pop('rle')
    tile_count += count  # 计算所有方块是否够一列
    temp_list.extend([tile_dict]*count)
    if tile_count == height:
        data.append(temp_list)
        tile_count = 0
        temp_list = deque()
transpose_list =  np.array(data).transpose()
final = []
for i in transpose_list:
    final.append([(k, len(list(v))) for k, v in itertools.groupby(i)])
return final

得到结果如下:

[({'data1': 'a'}, 2), ({'data3': 'c'}, 1)]
[({'data3': 'b'}, 1), ({'data1': 'a'}, 1), ({'data3': 'c'}, 1)]
[({'data3': 'b'}, 1), ({'data3': 'c'}, 2)]
[({'data3': 'b'}, 1), ({'data3': 'c'}, 1), ({'data2': 'b'}, 1)]

但数据量大的时候(上万乃至十万)运行效率非常低,占用内存也很多。

有没有改进建议??最好是关于numpy的运用,个人不是特别了解