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解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 5,030评论 0 0
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,227评论 1 118
  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 8,224评论 0 10
  • # 第一优先级规则声明: # 除了梦境,每一个意识主进程都必须与一个身体参与的机械进程相匹配,否则结束意识主进程。...
    李洞BarryLi阅读 9,390评论 0 1
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,821评论 0 5