回答編集履歴

2

Update

2022/05/19 16:04

投稿

melian
melian

スコア19825

test CHANGED
@@ -1,18 +1,19 @@
1
1
  ```python
2
2
  import random
3
+ from collections import defaultdict
3
4
 
4
5
  lst = [{'a': [1, 2, 3]}, {'a': [4, 5, 6, 7, 8]}]
5
6
  N = 800000
6
- counts = {k: 0 for d in lst for k in d['a']}
7
+ counts = defaultdict(int)
7
8
  weights = [len(d['a']) for d in lst]
8
9
 
9
10
  for _ in range(N):
10
11
  i = random.choice(random.choices(lst, weights)[0]['a'])
11
12
  counts[i] += 1
12
13
 
13
- print(counts)
14
+ print(dict(sorted(counts.items())))
14
15
 
15
16
  #
16
- {1: 99828, 2: 100291, 3: 100144, 4: 99913, 5: 100469, 6: 100009, 7: 99659, 8: 99687}
17
+ {1: 99954, 2: 99716, 3: 100201, 4: 99556, 5: 100484, 6: 99676, 7: 100434, 8: 99979}
17
18
  ```
18
19
 

1

Update

2022/05/19 15:41

投稿

melian
melian

スコア19825

test CHANGED
@@ -3,17 +3,16 @@
3
3
 
4
4
  lst = [{'a': [1, 2, 3]}, {'a': [4, 5, 6, 7, 8]}]
5
5
  N = 800000
6
+ counts = {k: 0 for d in lst for k in d['a']}
6
7
  weights = [len(d['a']) for d in lst]
7
- flat = sum([d['a'] for d in lst], [])
8
- counts = [0] * len(flat)
9
8
 
10
9
  for _ in range(N):
11
10
  i = random.choice(random.choices(lst, weights)[0]['a'])
12
- counts[flat.index(i)] += 1
11
+ counts[i] += 1
13
12
 
14
13
  print(counts)
15
14
 
16
15
  #
17
- [100321, 100308, 99962, 100045, 99819, 100198, 99560, 99787]
16
+ {1: 99828, 2: 100291, 3: 100144, 4: 99913, 5: 100469, 6: 100009, 7: 99659, 8: 99687}
18
17
  ```
19
18