python
复制代码
# -*- coding: utf-8 -*-
"""
@Created on : 2026/4/20 16:59
@creator : er_nao
@File :Day_04.py
@Description :字典dict全部用法
"""
"""
空字典:里面什么都没有,后续可以加内容
字典名 = {}
有内容的字典:键值对格式 键:值,用逗号隔开
字典名 = {"键1": "值1", "键2": "值2", "键3": "值3", ...}
"""
"""
知识点1:字典的查
字典名["键名"] --- (直接通过键获取对应的值,最常用)
字典名.get("键名", 默认值) ---(通过键获取值,键不存在时返回默认值,不会报错)
"""
word_text = {"自然": 2, "语言": 3, "处理": 1, "NLP": 5}
print("NLP的词频:", word_text["NLP"])
print("语言的词频:", word_text["语言"])
# get取值
print("get取值:", word_text.get("中古", "默认值"))
# 判断键是否在字典中存在
print("NLP在字典中吗?:", "NLP" in word_text)
print("中共在字典中吗:", "中共" in word_text)
"""
知识点2:字典的新增
字典名["新键"] = 新值 ---(往字典里添加单个新的键值对,最常用)
字典名.update(新字典) ---(批量添加多个键值对,或合并两个字典)
"""
word_freq = {"自然": 2, "语言": 3, "处理": 1}
# 赋值新增单个元素
word_freq['nlp'] = 8
print("新字典:", word_freq)
# update批量添加多个键值
new_word_freq = {'cv':10,'raw':11}
word_freq.update(new_word_freq)
print("批量添加后的字典:",word_freq)
"""
知识点3:字典的删除
del 字典名["键名"] --- 删除字典里指定的键值对,最常用
字典名.pop("键名", 默认值) ---删除指定的键值对,并返回对应的值,键不存在返回默认值
字典名.clear() ---清空字典里的所有键值对,变成空字典
"""
word_del = {'自然': 2, '语言': 3, '处理': 1, 'nlp': 8, 'cv': 10, 'raw': 11}
# 删除指定的键值对
del word_del['nlp']
print("删除指定的键值对后:",word_del)
# pop
text_pop = word_del.pop('raw','formdate')
print("删除掉的词频:",text_pop)
print("pop后:",word_del)
# clear()
word_del.clear()
print('clear后:',word_del)
"""
知识点4:字典的「遍历」
for 键名 in 字典名: ---遍历字典里所有的键
for 值 in 字典名.values(): ---遍历字典里所有的值
for 键名, 值 in 字典名.items(): ---同时遍历键和值,最常用
"""
word_bianli = {"自然": 2, "语言": 3, "处理": 1, "NLP": 5, "大模型": 4}
# 遍历所有的键(词)
for key in word_bianli:
print("当前键:",key)
# 遍历所有的值(词频)
for value in word_bianli.values():
print("当前值:", value)
# 同时遍历键和值
for key,value in word_bianli.items():
print(f"当前的键为:{key},值为{value}")
# 遍历是筛选,只打印词频大于3的词
for key, value in word_bianli.items():
if value > 3:
print(f"词:{key},出现次数:{value}")
"""
实操练习:
1.接收用户从键盘输入的一段中文文本
2.统计这段文本里,每个中文汉字出现的次数,用字典存储(键是汉字,值是出现次数),过滤掉空格和标点符号
3.对统计结果做以下处理:
打印所有出现次数大于 1 的汉字和对应的次数
找出出现次数最多的汉字,打印出来
统计这段文本里一共有多少个不同的汉字
4.把统计结果按出现次数从多到少倒序打印
"""
input_text = input("请输入一段中文文本:")
word_count ={}
word_list = list(input_text)
for w in word_list:
if w.strip() != "" and w not in ["。", ",", "!", "?", " "]:
if w not in word_count:
word_count[w] = 1
else:
word_count[w] = word_count[w] + 1
print("汉字出现次数统计结果:", word_count)
for key,count in word_count.items():
if count>1:
print(f"key是{key},出现次数:{count}")
print(f"一共有{len(word_count)}个不同的汉字")
# 找出出现次数最多的汉字(不会)
if word_count:
max_count = max(word_count.values())
max_char = [char for char,count in word_count.items() if count==max_count]
print(f"出现次数最多的汉字是{max_char},出现次数{max_count}")
# 把统计结果按出现次数从多到少倒序打印
"""
解释:
word_count.items() :就是获取字典里所有的键值对,每个键值对是一个小括号,比如字典是{"自":2, "然":3, "语":1},items()就会得到[("自",2), ("然",3), ("语",1)]
key=lambda x: x[1] :这是排序的核心规则,告诉sorted()函数,「你要按每个键值对的第 2 个部分来排序」,比如("然",3),x[0]就是第 1 个部分「汉字」,x[1]就是第 2 个部分「出现次数」
reverse=True : 排序的方向是倒序 ,如果不写这个参数,默认是reverse=False 也就是从小到大排
"""
sorted_word_count = sorted(word_count.items(), key=lambda item: item[1], reverse=True)
result_word=dict(sorted_word_count)
for key,value in sorted_word_count:
print(f"汉字:{key},出现次数:{value}")
print(result_word)