我需要帮助。我已经尝试了大约两个星期,但都没有效果。
我有一串单词,我想找到每个单词组的频率,打印单词(如果单词出现多次也没关系(,以及每个单词对每个单词组总频率。
例如,我有以下单词:
'abc'
'abc'
'abc'
'abc'
'xyz'
'xyz'
'tuf'
'pol'
'pol'
'pol'
'pol'
'pol'
'pol'
并且需要输出为:
'abc', 4
'abc', 4
'abc', 4
'abc', 4
'xyz', 2
'xyz', 2
'tuf', 1
'pol', 6
'pol', 6
'pol', 6
'pol', 6
'pol', 6
'pol', 6
我正在使用python3,我已经尝试过这个代码,但它没有按预期工作:
curr_tk = None
tk = None
count = 0
for items in data:
line = items.strip()
file = line.split(",")
tk = file[0]
if curr_tk == tk:
count += 1
else:
if curr_tk:
print ('%s , %s' % (curr_tk, count))
count = 1
curr_tk = tk
#print last word
if curr_tk == tk:
print ('%s , %s' % (curr_tk,count))
上面的代码给我的输出是:
'abc', 4
'xyz', 2
'tuf', 1
'pol', 6
但那不是我想要的。
假设您的数据来自列表,那么您可以执行以下
data = ['abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'tuf', 'pol', 'pol', 'pol', 'pol', 'pol', 'pol']
frequency_map = {}
for item in data:
if item in frequency_map:
frequency_map[item] += 1
else:
frequency_map[item] = 1
for item in data:
print(f"{item}, {frequency_map[item]}")
您的输出将是:
abc, 4
abc, 4
abc, 4
abc, 4
xyz, 2
xyz, 2
tuf, 1
pol, 6
pol, 6
pol, 6
pol, 6
pol, 6
pol, 6
您可以将相同的概念应用于来自任何来源的数据。例如,如果您的输入是字符串:
data = "'abc','abc','abc','abc','xyz','xyz','tuf','pol','pol','pol','pol','pol','pol'"
frequency_map = {}
words = data.split(',')
for item in words:
if item in frequency_map:
frequency_map[item] += 1
else:
frequency_map[item] = 1
for item in words:
print(f"{item}, {frequency_map[item]}")
这被称为频率列表,这就是你在这里寻找的。
最简单的方法是这样的:
data = ['abc','abc','abc','abc','xyz','xyz','tuf','pol','pol','pol','pol','pol','pol']
for item in data :
print(item, data.count(item))