美文网首页我的python学习道路
python Counter,Sum 相关随想

python Counter,Sum 相关随想

作者: fred_33c7 | 来源:发表于2020-02-15 20:17 被阅读0次

    首先,有个数组:

    old = [
        {
            'currency': 'u',
            'number': 100
        },
        {
            'currency': 'b',
            'number': 100
        }
        , {
            'currency': 'b',
            'number': 100
        }, {
            'currency': 'c',
            'number': 100
        }
    ]
    

    我想使它转换成:

    {'u': 100, 'b': 200, 'c': 100}
    

    常规做法:

    data = {
            'c': [],
            'b': [],
            'u': [],
    }
    
    for item in old:
        if item['currency'] == 'c':
            data['c'].append(item['number'])
        if item['currency'] == 'u':
            data['u'].append(item['number'])
        if item['currency'] == 'b':
            data['b'].append(item['number'])
    new = dict((k,sum(v))for k,v in data.items())
    

    还有什么更简单快捷的方法?其实只要用一行代码:

    new = dict(sum([Counter({item['currency']: item['number']}) for item in old], Counter()))
    

    虽然只有一行,但是其实里面有不少技巧

    1. Counter 的使用

    Counter()collections包下面的类,要用的时候,记得from collections import Counter
    Counter 返回值是一个Counter类,类似于dictionary的形式,用dic()方法使其转化为dictionary。

    a = [1,4,2,3,2,3,4,2]  
    from collections import Counter  
    print Counter(a)  
    print Counter(a).most_common(2)  
    

    out:

    Counter({2: 3, 4: 2, 3: 2, 1: 1})
    [(2, 3), (4, 2)]
    
    1. sum 的用法
      sum 的用法很简答,就是将数组里面的所有元素相加,例如还是上面的数组
    sum(a)
    

    返回21
    但是,如果将Counter 元素相加呢?

    [Counter({item['currency']: item['number']}) for item in old]
    

    这个就是一个list,能不能sum这个list呢?

    TypeError: unsupported operand type(s) for +: 'int' and 'Counter'
    

    我们会发现有这个error.但是问题是,我们只是将Counter相加,为什么会有int 呢?
    我们看一下sum的解释:

    sum by 菜鸟函数
    所以,sum()函数是有一个初始值的,如果我们重写sum()函数,那么
    def sum(values, start = 0):
        total = start
        for value in values:
            total = total + value
        return total
    

    就是这样,如果任何不是int类型的相加,我们都需要一个初始值,Counter()的初始值就是一个空的Counter().这样再理解,就容易的多了

    相关文章

      网友评论

        本文标题:python Counter,Sum 相关随想

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