文章目录
- Counter计数器
- defaultdict
- namedtuple
- map、reduce、filter函数
- map
- reduce
- filter
- groupby函数
使用高级函数在很多时候会减少自己的代码开发。
Counter计数器
Counter
是一个简单的计数器,例如统计字符出现的个数。Counter
类继承dict
类,所以它能使用dict
类里面的方法。
- 对iterable进行计数
使用Counter
可以很方便地统计出每个元素出现的次数:
上述实现当然可以使用dict
或者for
循环来实现,但是使用Counter
会更方便一点。
- update往Counter新增内容
使用update
可以往Counter
新增内容
- 像字典一样输出key/value
可以像字典一样,遍历输出key/value
:
- 输出最高频率的数据
除此之外还有一个功能,很方便的输出最高频率的数据,比如找到出现次数最高的前三个的内容:
defaultdict
使用dict
时,如果引用的key
不存在,就会抛出KeyError
。如果希望key
不存在时,返回一个默认值,就可以用defaultdict
。它是一个带默认值的字典。当然你也可以使用以下语句来对字典初始化:
if key not in d:
d[key] = 0
d[key] = []
d[key] += 3
d[key].append(123)
除了在Key
不存在时返回默认值,defaultdict
的其他行为跟dict
是完全一样的。defaultdict
的语法为:
- 语法:
dict =defaultdict(factory_function)
factory_function
可以是str
、int
、list
、set
,可以省略初始化。
- 默认的value为int类型
默认的value
为int
类型,直接加数字:
- 设置value为None
import collections
x = collections.defaultdict(lambda : 'N/A')
x['key1'] = 'abc'
print(x['key1']) # >>> abc
print(x['key2']) # >>> N/A
- 默认的value为list类型
默认的value
为list
类型,直接添加元素:
namedtuple
collections.namedtuple(typename, field_ names, *, verbose= False,
rename= False, module=None)
namedtuple
是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple
的某个元素。
这样一来,我们用nametuple
可以很方便地定义一种数据类型,它具备tuple
的不变性,又可以根据属性来引用。
import collections
Point = collections.namedtuple( 'Point', ['x', 'y'])
P = Point(1, 2)
print (P.x) # >>> 1
print(P.y) # >>> 2
PP = Point(x=3, y=4)
print(PP.x) ## >>> 3
print(PP.y) ## >>> 4
namedtuple
的属性值不能更改,否者会报错。比如设置PP.x=10
这样的语句就会报错。
map、reduce、filter函数
map
、reduce
、filter
是针对序列操作的函数。
map
map(function, iterable, ...)
给序列的每个元素应用一个函数,返回一个迭代器。
map
返回的并不是一个真正的list
,而是一个可遍历的对象。想要看起内容的话,可以使用list
将函数其转化为一个list
。
reduce
reduce(function, iterable)
使用function(x, y)
函数,将序列缩减成1个元素结果。
filter
filter(function, iterable)
使用返回bool
的function
对序列过滤,返回满足条件的结果。
filter(function, iterable)
的返回result
也是一个可遍历的对象,我们可以使用list
将其转化为可打印的对象。
groupby函数
groupby
是类似SQL
中groupby
的聚合函数(但只会相邻相同元素聚合)。按照指定key
进行数据分组,语法:
groupby(iterable, key=None)
构建一个数据,是个list,每个list里面是一个字典,包括文章的id、title、和分类。
如果想要按照category
将文章聚合在一起,怎么操作呢?当然可以使用for
循环加一个字典实现,但是groupby
会更方便一点。
但是python
中的groupby
只能实现相邻元素相同的聚合,因此我们首先需要对它进行排序:
使用groupby
聚合: