先筛再数,和直接数
运行下面这段程序,填写它打印出来的结果。
LOG = """08:12:03 INFO auth login ok
08:12:41 ERROR db timeout
08:13:02 INFO web page 200
08:13:15 WARN auth slow login
08:14:00 INFO db query ok
08:14:22 ERROR db timeout
08:15:03 INFO auth login ok
08:15:44 INFO web page 200
08:16:10 WARN db retry
08:16:55 ERROR web page 500
08:17:20 INFO db query ok
08:18:01 INFO auth logout""".strip().splitlines()
def keep(lines, word):
return [l for l in lines if word in l]
def field(lines, i):
return [l.split(" ")[i] for l in lines]
def tally(items):
d = {}
for v in items:
d[v] = d.get(v, 0) + 1
return sorted(d.items(), key=lambda kv: (-kv[1], kv[0]))
all_svc = tally(field(LOG, 2))[0]
err_svc = tally(field(keep(LOG, "ERROR"), 2))[0]
print(all_svc[0] + "-" + str(all_svc[1]) + "/"
+ err_svc[0] + "-" + str(err_svc[1]))
全部评论