4.字典dict全部用法

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)
相关推荐
好家伙VCC2 小时前
# React发散创新:从状态管理到自定义Hook的极致实践与性能优化在现代前端开发
java·javascript·python·react.js·性能优化
郝学胜-神的一滴2 小时前
深度学习入门:极简神经网络搭建与参数计算全攻略
人工智能·pytorch·python·深度学习·神经网络·机器学习
Metaphor6922 小时前
使用 Python 提取 PDF 文件中的文本、表格、图片
开发语言·python·pdf
2301_796588502 小时前
Navicat连ClickHouse出现中文乱码怎么办_字符集编码调整
jvm·数据库·python
编码者卢布2 小时前
【App Service】常规排查 App Service 启动 Application Insights 无数据的步骤 (.NET版本)
python·flask·.net
2401_837163892 小时前
CSS如何处理带有状态切换的折叠菜单_利用BEM修饰符管理状态
jvm·数据库·python
m0_617881422 小时前
Navicat连接MariaDB报1045密码错误怎么办_权限排查与解决
jvm·数据库·python
m0_515098422 小时前
C#怎么操作WPF数据模板 C#如何用DataTemplate定义集合项的显示样式和布局【控件】
jvm·数据库·python
qq_654366982 小时前
golang如何实现告警分级与升级_golang告警分级与升级实现步骤
jvm·数据库·python