美文网首页
python编程练习5

python编程练习5

作者: AlexDM | 来源:发表于2017-02-08 07:01 被阅读47次
    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

          本文链接:https://www.haomeiwen.com/subject/wpcvittx.html