-
使用collections模块中的Counter类来实现
with open('yourfile.txt', 'r') as f:
from collections import Counter
for k, v in Counter(str(f.readlines()).split()).items(): print(k, v)
2. 一个更简单的方法
words = input().split()
print('\n'.join(word + ' ' + str(words.count(word)) for word in set(words)))
3. 手动遍历列表并更新字典
# 假设这是你的列表
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
# 创建一个空字典来存储结果
count_dict = {}
# 遍历列表中的每个元素
for item in my_list:
if item in count_dict:
# 如果元素已经在字典中,增加它的计数
count_dict[item] += 1
else:
# 如果元素不在字典中,将其添加到字典并设置计数为1
count_dict[item] = 1
# 打印结果
print(count_dict)
4. 使用defaultdict
from collections import defaultdict
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = defaultdict(int) # int作为默认工厂函数,表示默认值为0
for item in my_list:
count_dict[item] += 1
print(dict(count_dict)) # 将defaultdict转换为普通字典进行打印
5. 使用get
方法
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = {}
for item in my_list:
count_dict[item] = count_dict.get(item, 0) + 1
print(count_dict)
6. 使用groupby
from itertools import groupby
my_list = sorted(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
count_dict = {k: sum(1 for _ in g) for k, g in groupby(my_list)}
print(count_dict)
7. 使用set
和列表推导
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
unique_items = set(my_list)
count_dict = {item: my_list.count(item) for item in unique_items}
print(count_dict)
8. 使用循环和enumerate
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = {}
for index, item in enumerate(my_list):
if item in count_dict:
count_dict[item] += [my_list[index]]
else:
count_dict[item] = [my_list[index]]
for k, v in count_dict.items():
print(f"{k}: {len(v)}") # 打印每个元素及其出现次数
9. 使用map
函数
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = dict(map(lambda x: (x, my_list.count(x)), my_list))
print(count_dict)
10. 使用reduce
函数
import numpy as np
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
unique_items = np.unique(my_list)
counts = np.array([np.count_nonzero(my_list == item) for item in unique_items])
count_dict = dict(zip(unique_items, counts))
print(count_dict)
11. 使用itertools.tee
from itertools import tee
def count_items(it):
seen = set()
counts = {}
for item in it:
if item in seen:
counts[item] += 1
else:
seen.add(item)
counts[item] = 1
return counts
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = count_items(tee(my_list, 2)[0]) # 使用tee创建两个相同的迭代器
print(count_dict)
12. 使用collections.defaultdict
与map
结合
from collections import defaultdict
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = defaultdict(int)
count_dict = map(lambda x: (x, count_dict[x] + 1), my_list)
count_dict = dict(count_dict)
print(count_dict)
13. 使用operator.itemgetter
from operator import itemgetter
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count_dict = {}
for item in my_list:
key = itemgetter(0)(count_dict.get(item, [item, 0]))
count_dict[item] = [key, count_dict.get(item, [item, 0])[1] + 1]
count_dict = {k: v[1] for k, v in count_dict.items()}
print(count_dict)
14. 使用多线程或多进程
from concurrent.futures import ThreadPoolExecutor
from itertools import islice
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
chunk_size = 1000 # 根据你的数据集大小和可用资源调整这个值
def count_chunk(chunk):
return {item: my_list.count(item) for item in chunk}
chunks = [my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]
with ThreadPoolExecutor() as executor:
counts = executor.map(count_chunk, chunks)
count_dict = {k: v for d in counts for k, v in d.items()}
print(count_dict)
15. Pandas
import pandas as pd
df = pd.DataFrame(my_list, columns=['Fruit'])
count_dict = df['Fruit'].value_counts().to_dict()
print(count_dict)