Python:字典方法(词频统计相关)
在文本分析、日志处理以及自然语言处理中,词频统计(word frequency counting)通常以字典(dict)作为核心数据结构来保存统计结果。
字典是一种键值映射结构:
• 键(key):词项(word / term)
• 值(value):出现次数(frequency)
例如:
{ "python": 5, "data": 3, "analysis": 2}
在词频统计流程中:
• 字符串方法负责文本清洗与切分
• 字典方法负责统计、更新与管理词频结果
字典提供基于哈希表(hash table)的键值映射结构,能够以平均 𝑂(1) 时间复杂度完成查找与更新,因此非常适合词频统计这一类“动态计数”任务。
一、创建与初始化词频字典
在统计开始前,通常需要创建一个空字典,用于保存统计结果。
freq = {}
当遍历词列表时,可以逐步更新字典中的统计值。
示例:
words = ["apple", "banana", "apple", "orange", "banana", "apple"]
freq = {}
for w in words: if w not in freq: freq[w] = 0 freq[w] += 1
print(freq)
输出:
{'apple': 3, 'banana': 2, 'orange': 1}
这种方式体现了字典统计的基本逻辑:
• 若键不存在,则创建
• 若键存在,则更新值
二、安全读取词频值
在统计过程中,经常需要读取某个词当前的统计值。如果该词尚未出现,则可能产生异常。
get()
返回指定键对应的值;若键不存在,则返回默认值。
dict.get(key[, default])
参数说明:
• key:要查询的键
• default:键不存在时返回的默认值(默认 None)
示例:
freq = {"apple": 3, "banana": 2}
print(freq.get("apple"))print(freq.get("orange", 0))
输出:
30
在词频统计中,get() 常用于避免 KeyError。
例如:
freq = {}
for w in words: freq[w] = freq.get(w, 0) + 1
这种写法是 Python 中最常见的词频统计模式。
setdefault()
用于在访问键的同时,为不存在的键设置默认值。
dict.setdefault(key[, default])
参数说明:
• key:要查询的键
• default:当键不存在时插入的默认值(默认 None)
返回值:
• 若键存在,返回该键对应的值
• 若键不存在,则插入 key: default,并返回 default
示例:
freq = {"apple": 3}
print(freq.setdefault("apple", 0))print(freq.setdefault("banana", 0))print(freq)
输出:
30{'apple': 3, 'banana': 0}
解释:
• "apple" 已存在,因此直接返回 3
• "banana" 不存在,因此创建 "banana": 0 并返回 0
在词频统计中,setdefault() 也可以用于初始化计数。
例如:
freq = {}
for w in words: freq.setdefault(w, 0) freq[w] += 1
不过在实际代码中,更常见的写法仍然是使用 get() 函数。
三、更新词频统计
在统计过程中,需要不断更新字典中的值。
update()
使用另一个映射或键值对更新字典。
dict.update([other])
参数说明:
• other:映射对象(mapping)或 (key, value) 对序列
示例:
freq = {"apple": 3}freq.update({"banana": 2})print(freq)
输出:
{'apple': 3, 'banana': 2}
在词频统计中,update() 主要用于合并统计结果。
例如:
freq1 = {"apple": 3, "banana": 2}freq2 = {"banana": 1, "orange": 4}freq1.update(freq2)
注意:
update() 会直接覆盖旧值,而不是累加,因此不适合直接合并两个词频统计结果。
如果需要累加词频,应当使用循环、collections.Counter 或自定义合并逻辑,因为 update() 的语义是覆盖映射关系,而不是执行数值运算。
四、删除词项
在某些场景下,需要从统计结果中删除某些词项,例如停用词(stopwords)或低频词。
pop()
删除指定键并返回其值。
dict.pop(key[, default])
参数说明:
• key:要删除的键
• default:键不存在时返回的默认值
示例:
freq = {"apple": 3, "banana": 2, "orange": 1}freq.pop("orange")print(freq)
输出:
{'apple': 3, 'banana': 2}
popitem()
删除并返回字典中的最后一个键值对(Python 3.7+ 为 LIFO)。
这是因为 Python 3.7 起字典保持插入顺序,因此 popitem() 会移除最近插入的元素。
dict.popitem()
示例:
freq = {"apple": 3, "banana": 2}print(freq.popitem())
输出:
('banana', 2)
该方法较少用于词频统计,但在某些数据结构处理中有价值。
五、遍历词频字典
统计完成后,通常需要遍历字典进行输出或进一步处理。
keys()
返回字典的所有键。
dict.keys()
示例:
freq = {"apple": 3, "banana": 2}
for word in freq.keys(): print(word)
输出:
applebanana
values()
返回字典的所有值。
dict.values()
示例:
freq = {"apple": 3, "banana": 2}print(list(freq.values()))
输出:
[3, 2]
items()
返回键值对视图。
dict.items()
示例:
freq = {"apple": 3, "banana": 2}
for word, count in freq.items(): print(word, count)
输出:
apple 3
banana 2
在词频统计中,items() 是最常用的遍历方式。
六、排序与输出
词频统计完成后,常常需要按照频次排序输出。
排序通常要用到内置函数 sorted(),并与字典的 items() 结合使用。
示例:
freq = {"apple": 3, "banana": 2, "orange": 1}result = sorted(freq.items(), key=lambda item: item[1], reverse=True)print(result)
输出:
[('apple', 3), ('banana', 2), ('orange', 1)]
解释:
• freq.items() 返回 (word, count) 结构
• item[1] 表示按频次排序
• reverse=True 表示降序排列
七、词频统计流程示例
下面给出一个简单的英文词频统计示例。
import string
text = """Python is powerful. Python is easy to learn.Many developers use Python for data analysis."""
# 1. 统一小写text = text.lower()
# 2. 删除英文标点table = str.maketrans("", "", string.punctuation)text = text.translate(table)
# 3. 切分为词words = text.split()
# 4. 统计词频freq = {}
for w in words: freq[w] = freq.get(w, 0) + 1
# 排序输出for word, count in sorted(freq.items(), key=lambda item: item[1], reverse=True): print(word, count)
📘 小结
在词频统计任务中,字典(dict)是保存统计结果的核心数据结构。通过 get() 可以安全地读取并更新计数,通过 update() 与 pop() 可以管理统计结果,通过 keys()、values()、items() 可以遍历词频数据,再结合 sorted() 即可完成按频次排序输出。字典基于哈希表实现,能够以接近 𝑂(1) 的效率完成查找与更新,因此非常适合动态词频统计。

“点赞有美意,赞赏是鼓励”
更多推荐


所有评论(0)