python编程练习5

Paste_Image.png

今天的python题目是合并表记录:
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

其实就是利用字典进行的按索引求和,然后按索引排序输出。

自己练习的代码对于正常的输入是没有问题的,对于一些异常的输入就没法了

import sys

d = {}
for line in sys.stdin:
    line = line.strip().split(' ')
    k = int(line[0])
    v = int(line[1])
    if k in d:
        d[k] += v
    else:
        d[k] = v

for k,v in sorted(d.items(),key=lambda x:x[0],reverse=False):
    print k,v

下面是优秀案例:

def fun8():
    d = {}
    for _ in range(input()):
        k, v = map(int, raw_input().split())
        d[k] = d.get(k, 0) + v
    print '\n'.join(map(lambda x: '%d %d'% (x[0], x[1]), sorted(d.items(), key=lambda x: x[0])))
while True:
    try:
        fun8()
    except EOFError:
        break

这段代码比较简洁,规范。在按索引进行运算的时候,它没有使用if语句判断key是否在字典中,而是使用了get方法,并且指定了默认值,这是之前没有注意到的知识点。

字典的一些知识点:
1、dict.get(key, default=None)
2、sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数。其中iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序,默认时reverse=false

最后是比较中规中矩的一个代码

import sys

n = int(raw_input())
dic = {}
for i in range(n):
    item = sys.stdin.readline().strip('\n').split(' ')
    k = int(item[0])
    v = int(item[1])
    if k in dic:
        dic[k] += v
    else:
        dic[k] = v

list1 = dic.keys()
list1.sort()
for i in list1:
    print i, dic[i]

参考资料:
https://www.nowcoder.com

你可能感兴趣的:(python编程练习5)