Python 中的项目频率计数
- 2025-01-13 08:52:00
- admin 原创
- 44
问题描述:
假设我有一个单词列表,我想找出每个单词在该列表中出现的次数。
一个明显的方法是:
words = "apple banana apple strawberry banana lemon"
uniques = set(words.split())
freqs = [(item, words.split().count(item)) for item in uniques]
print(freqs)
但是我发现这个代码不是很好,因为程序运行了两次单词列表,一次用于构建集合,第二次用于计算出现的次数。
当然,我可以编写一个函数来遍历列表并进行计数,但这样不太符合 Python 风格。那么,有没有更高效、更符合 Python 风格的方法呢?
解决方案 1:
模块中的Counter
类专门collections
用于解决此类问题:
from collections import Counter
words = "apple banana apple strawberry banana lemon"
Counter(words.split())
# Counter({'apple': 2, 'banana': 2, 'strawberry': 1, 'lemon': 1})
解决方案 2:
defaultdict来救援!
from collections import defaultdict
words = "apple banana apple strawberry banana lemon"
d = defaultdict(int)
for word in words.split():
d[word] += 1
这在 O(n) 中运行。
解决方案 3:
freqs = {}
for word in words:
freqs[word] = freqs.get(word, 0) + 1 # fetch and increment OR initialize
我认为这个结果与 Triptych 的解决方案相同,但没有导入集合。也有点像 Selinap 的解决方案,但在我看来更易读。几乎与 Thomas Weigel 的解决方案相同,但没有使用异常。
但是,这可能比使用 collections 库中的 defaultdict() 更慢。因为值被获取、递增,然后再次赋值。而不是仅仅递增。但是使用 += 可能在内部执行相同的操作。
解决方案 4:
标准方法:
from collections import defaultdict
words = "apple banana apple strawberry banana lemon"
words = words.split()
result = defaultdict(int)
for word in words:
result[word] += 1
print result
Groupby 一行代码:
from itertools import groupby
words = "apple banana apple strawberry banana lemon"
words = words.split()
result = dict((key, len(list(group))) for key, group in groupby(sorted(words)))
print result
解决方案 5:
如果您不想使用标准字典方法(循环遍历列表以增加正确的字典键),您可以尝试以下方法:
>>> from itertools import groupby
>>> myList = words.split() # ['apple', 'banana', 'apple', 'strawberry', 'banana', 'lemon']
>>> [(k, len(list(g))) for k, g in groupby(sorted(myList))]
[('apple', 2), ('banana', 2), ('lemon', 1), ('strawberry', 1)]
它的运行时间为 O(n log n)。
解决方案 6:
没有默认字典:
words = "apple banana apple strawberry banana lemon"
my_count = {}
for word in words.split():
try: my_count[word] += 1
except KeyError: my_count[word] = 1
解决方案 7:
user_input = list(input().split(' '))
for word in user_input:
print('{} {}'.format(word, user_input.count(word)))
解决方案 8:
words = "apple banana apple strawberry banana lemon"
w=words.split()
e=list(set(w))
word_freqs = {}
for i in e:
word_freqs[i]=w.count(i)
print(word_freqs)
希望这有帮助!
解决方案 9:
你不能只使用计数吗?
words = 'the quick brown fox jumps over the lazy gray dog'
words.count('z')
#output: 1
解决方案 10:
我碰巧做了一些 Spark 练习,这是我的解决方案。
tokens = ['quick', 'brown', 'fox', 'jumps', 'lazy', 'dog']
print {n: float(tokens.count(n))/float(len(tokens)) for n in tokens}
#上述输出
{'brown': 0.16666666666666666, 'lazy': 0.16666666666666666, 'jumps': 0.16666666666666666, 'fox': 0.16666666666666666, 'dog': 0.16666666666666666, 'quick': 0.16666666666666666}
解决方案 11:
list = input() # Providing user input passes multiple tests
text = list.split()
for word in text:
freq = text.count(word)
print(word, freq)
解决方案 12:
使用 reduce() 将列表转换为单个字典。
from functools import reduce
words = "apple banana apple strawberry banana lemon"
reduce( lambda d, c: d.update([(c, d.get(c,0)+1)]) or d, words.split(), {})
返回
{'strawberry': 1, 'lemon': 1, 'apple': 2, 'banana': 2}
解决方案 13:
我在 Zybook 上做过类似的任务,这是对我有用的解决方案。
def build_dictionary(words):
counts = dict()
for word in words:
if word in counts:
counts[word] += 1
else:
counts = 1
return counts
if __name__ == '__main__':
words = input().split()
your_dictionary = build_dictionary(words)
sorted_keys = sorted(your_dictionary.keys())
for key in sorted_keys:
print(key + ':' + str(your_dictionary[key]))
解决方案 14:
下面的答案需要一些额外的周期,但这是另一种方法
def func(tup):
return tup[-1]
def print_words(filename):
f = open("small.txt",'r')
whole_content = (f.read()).lower()
print whole_content
list_content = whole_content.split()
dict = {}
for one_word in list_content:
dict[one_word] = 0
for one_word in list_content:
dict[one_word] += 1
print dict.items()
print sorted(dict.items(),key=func)
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD