Python列表元素统计次数及转为字典

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python列表元素统计次数及转为字典相关的知识,希望对你有一定的参考价值。

Python列表元素统计次数的方法

count()

array.count(x)

  • 返回 x 在数组中的出现次数。
T = (123, 'Google', 'Runoob', 'Taobao', 123);
 
print ("123 元素个数 : ", T.count(123))
print ("Runoob 元素个数 : ", T.count('Runoob'))

以上实例输出结果如下:

123 元素个数 :  2
Runoob 元素个数 :  1

dict()

循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1.

lists = ['a','a','b',5,6,7,5]
count_dict = dict()
for item in lists:
   if item in count_dict:
       count_dict[item] += 1
   else:
       count_dict[item] = 1

例如:

在这里插入图片描述

def all_house(arr):
    key = np.unique(arr)
    result = {}
    # 循环每一个去重后的房型
    for k in key:
        mask = (arr == k)  # 如果arr=k值,我就赋值,返回结果是 True False的列表
        arr_new = arr[mask]  # 添加这个户型所对应的值(取出True的数据放入arr_new中)
        v = arr_new.size  # 取出大小
        result[k] = v  # 创建键值对,加入dict中
    return result

house_info = all_house(house_data)

# 去掉统计数量较少的值
# 字典推导式
house_data = dict((key, value) for key, value in house_info.items() if value > 50)  # 如果value值>50就get
show_houses = pd.DataFrame({'户型': [x for x in house_data.keys()], 
              '数量': [x for x in house_data.values()]})

在这里插入图片描述

defaultdict()

defaultdict(parameter)可以接受一个类型参数,如str,int等,但传递进来的类型参数,不是用来约束值的类型,更不是约束键的类型,而是当键不存在的话,实现一种值的初始化。

  1. defaultdict(int):初始化为 0
  2. defaultdict(float):初始化为 0.0
  3. defaultdict(str):初始化为 ''
from collections import defaultdict
lists = ['a', 'a', 'b', 5, 6, 7, 5]
# 创建字典对象
count_dict = defaultdict(int)
for item in lists:
    count_dict[item] += 1

set()&list()

先使用set()去重,然后循环的把每一个元素和每一个元素对应的次数lists.count(item)组成一个元组放在列表里面。

lists = ['a', 'a', 'b', 5, 6, 7, 5]
count_set = set(lists)
count_list = list()
for item in count_set:
    count_list.append((item,lists.count(item))

Counter()

Counter是一个容器对象,主要的作用是用来统计散列对象,可以使用三种方式来初始化

  1. 参数里面参数可迭代对象 Counter("success")
  2. 传入关键字参数 Counter((s=3,c=2,e=1,u=1))
  3. 传入字典 Counter({"s":3,"c"=2,"e"=1,"u"=1})

Counter()对象还有几个可以调用的方法,代码里面分别进行了说明:

from collections import Counter
lists = ['a', 'a', 'b', 5, 6, 7, 5]
a = Counter(lists)
print(a)  # Counter({'a':2, 5:2, 'b':1, 6:1, 7:1})

a.elements()  # 获取a所有的键,返回是一个对象,我们可以通过list来转化它
a.most_common(2)  # 前两个出现频率最高的元素已经统计过次数,返回的是列表里嵌套元组
a['zz']  # 访问不存在的时候,默认返回0
a.update('aac')  # 更新被统计的对象,即原有的计数值与新增的相加,而不是替换
a.substrct('aac')  # 实现与原有数值相减,结果运行为0和负值

collections

collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:

  • OrderedDict类:排序字典,是字典的子类。引入自2.7。
  • namedtuple()函数:命名元组,是一个工厂函数。引入自2.6。
  • Counter类:为hashable对象计数,是字典的子类。引入自2.7。
  • deque:双向队列。引入自2.4。
  • defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键。引入自2.5。
collections.Counter(house_data)

在这里插入图片描述

参考:Link

衷心感谢!

加油!

感谢!

努力!

以上是关于Python列表元素统计次数及转为字典的主要内容,如果未能解决你的问题,请参考以下文章

Python-列表元素出现次数及频率

python基础一 ------如何统计一个列表元素的频度

返回(统计)一个列表中出现次数最多的元素

13 个非常有用的 Python 代码片段

python统计数组元素出现次数以及排序

Python 统计列表里面有多少个元素