文章目录

  • Counter计数器
  • defaultdict
  • namedtuple
  • map、reduce、filter函数
  • map
  • reduce
  • filter
  • groupby函数


  使用高级函数在很多时候会减少自己的代码开发。

Counter计数器

  Counter是一个简单的计数器,例如统计字符出现的个数。Counter类继承dict类,所以它能使用dict类里面的方法。

  1. 对iterable进行计数

  使用Counter可以很方便地统计出每个元素出现的次数:

python map内嵌套list python中list(map)_windows

  上述实现当然可以使用dict或者for循环来实现,但是使用Counter会更方便一点。

  1. update往Counter新增内容

  使用update可以往Counter新增内容

python map内嵌套list python中list(map)_windows_02

  1. 像字典一样输出key/value

  可以像字典一样,遍历输出key/value

python map内嵌套list python中list(map)_linux_03

  1. 输出最高频率的数据

  除此之外还有一个功能,很方便的输出最高频率的数据,比如找到出现次数最高的前三个的内容:

python map内嵌套list python中list(map)_python_04

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可以是strintlistset,可以省略初始化。

  1. 默认的value为int类型

  默认的valueint类型,直接加数字:

python map内嵌套list python中list(map)_windows_05

  1. 设置value为None
import collections
x = collections.defaultdict(lambda : 'N/A')
x['key1'] = 'abc'
print(x['key1']) # >>> abc
print(x['key2']) # >>> N/A
  1. 默认的value为list类型

  默认的valuelist类型,直接添加元素:

python map内嵌套list python中list(map)_python_06

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函数

  mapreducefilter是针对序列操作的函数。

map

  map(function, iterable, ...)给序列的每个元素应用一个函数,返回一个迭代器。

python map内嵌套list python中list(map)_数据_07

  map返回的并不是一个真正的list,而是一个可遍历的对象。想要看起内容的话,可以使用list将函数其转化为一个list

reduce

  reduce(function, iterable)使用function(x, y)函数,将序列缩减成1个元素结果。

python map内嵌套list python中list(map)_python_08

filter

  filter(function, iterable)使用返回boolfunction对序列过滤,返回满足条件的结果。

python map内嵌套list python中list(map)_linux_09

  filter(function, iterable)的返回result也是一个可遍历的对象,我们可以使用list将其转化为可打印的对象。

groupby函数

  groupby是类似SQLgroupby的聚合函数(但只会相邻相同元素聚合)。按照指定key进行数据分组,语法:

  • groupby(iterable, key=None)

构建一个数据,是个list,每个list里面是一个字典,包括文章的id、title、和分类。

python map内嵌套list python中list(map)_python_10

  如果想要按照category将文章聚合在一起,怎么操作呢?当然可以使用for循环加一个字典实现,但是groupby会更方便一点。

  但是python中的groupby只能实现相邻元素相同的聚合,因此我们首先需要对它进行排序:

python map内嵌套list python中list(map)_数据_11

  使用groupby聚合:

python map内嵌套list python中list(map)_python_12