既に、回答がでてますが配列が3つ以上のケースです。
処理速度を上げるために、配列へのインデックスを作成しています。
v = arr[i]['a'][j]
のvが乱数rから取得した配列内の数値です。
不明点は補足してください。
python3
1import random
2arr = [ { 'a':[1,2,3]},{ 'a':[4,5,6,7,8]},{ 'a':[9,10,11,12]},{ 'a':[13] },{ 'a':[14,15,16,17,18,19,20]}]
3
4len_all = 0
5lens = []
6for i in range(len(arr)):
7 len_all += len(arr[i]['a'])
8 lens.append(len_all)
9
10ctr = [ 0 ] * (len_all+1)
11ix = [ None ] * len_all
12
13for i in range(len_all):
14 for j in range(len(lens)):
15 if i < lens[j]:
16 ix[i] = j
17 break
18
19for x in range(200000):
20 r = random.randrange(len_all)
21 i = ix[r]
22 if i == 0:
23 j = r
24 else:
25 j = r - lens[i-1]
26 v = arr[i]['a'][j]
27 ctr[v] += 1
28
29print(ctr)
30
実行結果
[0, 9870, 10064, 10062, 9836, 10012, 10093, 10025, 9954, 10062, 10138, 10047, 10010, 10038, 9996, 9854, 9953, 9985, 10064, 9982, 9955]