今天的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
网友评论