有一个需求是获取所有存在愿望的城市,并且找出热门城市。
刚好前几天看到了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 | top4 = [_[0] for _ in c[:4]] |
现在 top4
里存放的就是排名前四的城市adcode,others
里存放的是其他有愿望地区的城市adcode按照愿望数量排序的数组。