0830 华为刷题:简单错误记录

01 题目描述

0830 华为刷题:简单错误记录_第1张图片0830 华为刷题:简单错误记录_第2张图片

02 重要考点:字符串处理、有序字典、字典排序

  • 我的代码:(通过率30%)
import sys
dic = {}
# 01 将所有数据按字典读入
while True:
    try:
        filename_row = sys.stdin.readline().strip().split()
        filename = filename_row[0][filename_row[0].rfind("\\")+1:]
        row = int(filename_row[1])
        if (filename,row) in dic:
            dic[(filename,row)] += 1
        else:
            dic[(filename,row)] = 1
    except:
        break
# 02 按值排序字典
items_dict = dic.items()
sort_dict = sorted(items_dict, key=lambda x: x[1], reverse=True)
count = 0
for i in range(len(sort_dict)):
    count+=1
    if count <= 8:
        f_name = sort_dict[i][0][0]
        error_count = sort_dict[i][0][1]
        error_num = sort_dict[i][1]
        if len(f_name) > 16:
            f_name = f_name[-16:]
        #print(' '.join([f_name, str(error_count), str(error_num)]))
        print("{0} {1} {2}".format(f_name,str(error_count),str(error_num)))
    else:
        break

不能完全通过原因:不满足题目中的第一个要求。

结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。

这个要求需要借用有序字典实现。

python默认字典是无序的,但是当我们需要动态添加并需要按添加顺序输出的时候,就需要使用OrderedDict()

03 全通过代码

import collections
error_dict = collections.OrderedDict()
while True:
    try:
        filename_row = input().split()
        filename = filename_row[0][filename_row[0].rfind('\\')+1:]
        row = filename_row[1]
        if (filename, row) in error_dict:
            error_dict[(filename, row)] += 1
        else:
            error_dict[(filename, row)] = 1
    except:
        break
 
error_dict = error_dict.items()
sort_dict = sorted(error_dict, key=lambda x: x[1], reverse=True)
error_count = 0
for each in sort_dict:
    error_count += 1
    if error_count <= 8:
        name = each[0][0]
        if len(name)>16:
            name = name[-16:]
        row = each[0][1]
        count = each[1]
        print(' '.join([name, str(row), str(count)]))
    else:
        break

04 对比无序字典和有序字典(版本:python3.5.2)

import collections

print ('Regular dictionary:')
d = {}
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'

for k, v in d.items():
    print(k, v)

print ('\nOrderedDict:')
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'

for k, v in d.items():
    print(k, v)

0830 华为刷题:简单错误记录_第3张图片

最后:声明方式

  • 有序:d = {}
  • 无序:
import collections
d = collections.OrderedDict()

你可能感兴趣的:(编程学习笔记)