collections.Counter的使用

有一个需求是获取所有存在愿望的城市,并且找出热门城市。

刚好前几天看到了Python的计数器:collections.Counter, 于是就拿来用了用。

  • 首先导入 Counter:
1
from collections import Counter
  • 通过查询数据库获取到所有满足条件的愿望放在wishes数组中,然后遍历所有数据,把所有城市的adcode存在一个数组中:
1
cities = [wish.adcode for wish in wishes]

(我发现我最近越来越用推导式了。。。

  • 然后使用Counter进行操作:
1
c = Counter(cities).most_common()

这样得到的结果是一个数组,每个元素是一个长度为2的元组,元组第0位保存的是数据,第1位保存的是这个数据出现的次数,整个数组是按照元素出现次数排序的,most_common()还可以带int型的参数,表示获取排名前n个的结果。不带参数表示获取所有结果。

以上得到的结果为:

1
[(110000, 4), (510800, 3)],...

获取热门城市只需拿前4个数据就行(需求是4个热门城市),其他城市拿剩下的数据即可(注意,c 里每个元素是一个元组,元组的一个0位才是我们要的数据):

1
2
top4 = [_[0] for _ in c[:4]]
others = [_[0] for _ in c[4:]]

现在 top4 里存放的就是排名前四的城市adcode,others 里存放的是其他有愿望地区的城市adcode按照愿望数量排序的数组。