python 字典排序题:生成60个30-100之间的随机整数作为分数(score),统计其中各个分数出现的次数,按照出现次数的从高到低的顺序打印出来。

156 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题目:

生成60个30-100之间的随机整数作为分数(score),统计其中各个分数出现的次数,按照出现次数的从高到低的顺序(不包括出现次数为0的分数)打印出来。

首先采用每行:分数 次数格式输出 其次每行: 次数:分数1、分数2.... 的格式输出

代码:

import random

score_num = {}   # key=score,value=num
for _ in range(60):
    score = random.randint(30, 100)    # 产生30-100的随机整数(包括30和100)
    score_num[score] = score_num.get(score, 0) + 1    # 更新score的次数

num_scores = {}   # key=num,value=list[score]
for score, num in sorted(score_num.items(), key=lambda x: (-x[1], x[0])):
    print(f'{score}\t{num}')
    if num in num_scores:
        num_scores[num].append(str(score))
    else:
        num_scores[num] = [str(score)]   # value以列表形式存放

print()
for num, scores in sorted(num_scores.items(), key=lambda x: (-x[0], x[1])):
    print(f'次数 {num}:  {", ".join(scores)}')

result:

69	4
43	3
47	3
59	3
75	3
42	2
51	2
56	2
62	2
63	2
74	2
76	2
79	2
90	2
95	2
31	1
33	1
35	1
40	1
46	1
50	1
52	1
53	1
58	1
61	1
65	1
67	1
68	1
70	1
71	1
72	1
80	1
81	1
85	1
88	1
89	1
96	1
99	1
100	1

次数 4:  69
次数 3:  43, 47, 59, 75
次数 2:  42, 51, 56, 62, 63, 74, 76, 79, 90, 95
次数 1:  31, 33, 35, 40, 46, 50, 52, 53, 58, 61, 65, 67, 68, 70, 71, 72, 80, 81, 85, 88, 89, 96, 99, 100