当前位置: 首页 > news >正文

在PyCharm写Python字典:新手必避7大坑

前言

新手写字典,列表当键直接报错,查无此键程序崩溃,边遍历边删当场出错,默认值乱用结果变空,与is傻傻分不清,浅拷贝一改全改,自定义键无法查找。七个坑,步步惊心。
我也曾绊得踉跄、摔得生疼、绕得头晕——直到给键换元组,用get()防崩溃,删除前先存清单,用get()指定默认值,拿*
*判断是不是同一个,deepcopy复制彻底,给类加哈希功能和相等判断功能。七个招,豁然开朗。
本文三成速通语法,七成排雷避坑——用我的踩坑经验,带你避开8大坑,字典听你话。
如果你不会安装和使用Pycharm和Python.exe,请读以下两篇文章。
安装Pycharm+配置python.exe:0基础新手一次成功
如何使用PyCharm?0基础新手必看!七大核心功能+越用越有意思

字典基础语法速成

字典创建与基本结构

知识点:字典用{}创建,核心是键值对(键唯一),底层用哈希表实现,查找极快。实战案例如下,新手可以跟着敲。

# 通过创建字典,创建游戏角色属性卡super_hero={"name":"剑圣","HP":120,"攻击":35}print(super_hero["name"])# 输出: 剑圣

键值对增删改查

知识点:查用[],增/改直接赋值,删用del。键不存在时查会报错,增则新建。实战案例如下,新手可以跟着敲。

# 3秒修改购物车商品数量cart={"梨":3,"苹果":2}cart["梨"]=5# 改cart["香蕉"]=3# 增delcart["苹果"]# 删print(cart['梨'])# {'梨': 5} #查print(cart)# {'梨': 5, '香蕉': 3}

字典遍历

知识点:.keys()取键,.values()取值,.items()取键值对。遍历是操作字典的核心技能。实战案例如下,新手可以跟着敲。

# 学生成绩字典:姓名是键,分数是值scores={"小明":85,"小红":92}# .keys() 取所有键(学生姓名)names=scores.keys()print(f"学生名单:{list(names)}")# .values() 取所有值(分数)all_scores=scores.values()print(f"所有分数:{list(all_scores)}")# .items() 取键值对,遍历同时拿到姓名和分数forname,scoreinscores.items():# 判断等级:90分及以上为A,否则为Bifscore>=90:level="A"else:level="B"print(f"{name}:{level}")# 输出: 小明:B 小红:A

常用内置方法速查

知识点:.get()安全取值(无键返None或默认值),.keys()/values()/items()返回视图对象,可迭代。实战案例如下,新手可以跟着敲。

# 内置方法极简演示d={"a":1,"b":2}print(d.get("c","无"))# 安全取: 无print(list(d.keys()))# 所有键: ['a', 'b']print(list(d.values()))# 所有值: [1, 2]print(list(d.items()))# 键值对: [('a', 1), ('b', 2)]

排雷生存指南

坑1:可变对象当键

问题代码

# 列表是可变对象,不可哈希,用作键会报错name={[1,3]:'c'}

修正代码

# 改用不可变的元组当键name={(1,3):'c'}print(name[(1,3)])# 输出:c

总结

字典键必须是不可哈希(不可变)类型的,如元素。字典键是可哈希(可变)类型的(如列表)会报错。

坑2:键不存在硬取值

问题代码

user_infomation={'001':'李四'}print(user_infoation['003'])# 查询不存在的用户ID

修正代码

user_infomation={'001':'李四'}# 用get方法优雅处理,不存在返回默认值print(user_infomation.get('003','用户不存在'))# 输出:用户不存在

总结

直接用[]取值不存在会报错,用get()方法可指定默认值,来避免崩溃。

坑3:遍历中删元素

问题代码

good_orders={'001':'有效','002':'过期','003':'过期'}fornumberingood_orders:ifgood_orders[number]=='过期':delgood_orders[number]# 遍历中删除导致字典尺寸变化print(good_orders)

修正代码

good_orders={'001':'有效','002':'过期','003':'过期'}# 遍历键的副本,避免原字典尺寸变化fornumberinlist(good_orders.keys()):ifgood_orders[number]=='过期':delgood_orders[number]# 遍历中删除导致字典尺寸变化print(good_orders)

总结

遍历原字典删除元素时会报错,创建字典键的副本会安全地删除元素。

坑4:默认值的误用

问题代码

words_count={}words=['banana','apple','banana']forwordinwords:# get返回None时,+1会报错words_count[word]=words_count.get(word)+1print(words_count)

修正代码

words_count={}words=['banana','apple','banana']forwordinwords:# get指定默认值0,避免None参与运算words_count[word]=words_count.get(word,0)+1print(words_count)# 输出:{'apple': 2, 'banana': 1}

总结

get()默认返回none,无法直接参与运算。给get()指定合理默认值(如0)。

坑5:==与is混淆

问题代码

dict_1={'b':2}dict_2={'b':2}# 用is来判断(比较上述两字典的内存地址),误以为内容相同就相等print(dict_1isdict_2)# 输出:False

修正代码

dict_1={'b':2}dict_2={'b':2}# 用==判断内容是否相等print(dict_1==dict_2)# 输出:True

总结

用来比较内容,is是用来比较对象内存地址;内容相同的字典用**判断为 True,用is判断为 False。

坑6:浅拷贝的陷阱

问题代码

original_information={'user_infomation':{'name':'李四','age':19}}copy_information_dict=original_information.copy()# 浅拷贝仅仅复制表层copy_information_dict['user_infomation']['age']=25print(original_information['user_infomation']['age'])# 原件被修改了,输出:25

修正代码

importcopy original_information={'user_information':{'name':'李四','age':19}}# 深拷贝是来复制所有层级,互不影响deep_copy=copy.deepcopy(original_information)deep_copy['user_information']['age']=22print(original_information['user_information']['age'])# 输出:19

总结

浅拷贝是仅仅复制表层,修改嵌套对象会影响原字典,而深拷贝完全独立,没有此问题发生。

坑7:哈希碰撞的坑

问题代码

classUser:def__init__(self,user_id):self.user_id=user_id# 自定义类实例当键,默认哈希基于内存地址,导致缓存失效result={User(1):'数据1',User(1):'数据2'}print(len(result))# 输出:2(本该覆盖只存1个,却存了两个)

修正代码

classUser:def__init__(self,user_id):self.user_id=user_iddef__hash__(self):# 实现哈希方法returnhash(self.user_id)def__eq__(self,other):# 进行相等判断returnself.user_id==other.user_id result={User(1):'数据1',User(1):'数据2'}print(len(result))# 输出:1

总结

自定义类当键时,这需要实现__hash__和__eq__;否则因为哈希基于内存地址,所以缓存失效。

专栏下篇剧透:Python新手在PyCharm写while必踩5坑

专栏下篇剧透:《Python新手在PyCharm写while必踩5坑》。

如果你觉得本文有用,请动一动你宝贵的手指进行点赞、收藏、关注。我将持续更新PyCharm实战内容+Python基础语法痛点突破的干货,带你少走弯路。如果你有疑问,那就欢迎你在评论区留言。

http://www.jsqmd.com/news/986450/

相关文章:

  • 2025_NIPS_Neural Functional Transformers
  • Vue3+Vite实践 01
  • 官网最新 森辰 GEO 官方发布|官方企业电话联系方式 权威认证咨询专线 - 信息热点
  • DAM-3059HA_讲解
  • 淮南初三考不上高中怎么办?——推荐淮南职业技术学院(中专部) - 我叫小周
  • CNN卷积神经网络学习笔记
  • 啶虫脒农药残留检测卡快速检测果蔬中的啶虫脒农药残留
  • 2026 年 6 月腕表维保指南,深圳劳力士标识磨损失去光泽,深圳劳力士分享无损修复工艺与避坑小知识 - 亨得利官方维修中心
  • 2026重庆名表回收榜单:谁是TOP1?当属收的顶 - 奢侈品回收测评
  • 在Ubuntu 22.04上从源码编译IPOPT与HSL库:一份避坑指南与性能调优建议
  • 展锐平台摄像头点亮bringup
  • 【分享】间歇性断食最新版[特殊字符]海量减肥菜谱|饿出真理|减肥必备
  • 2026报考指南:四川专升本上线率高的专科学校推荐 - 品牌2026
  • 2026年波兰电池/能源/储能技术展深度盘点:TOP5储能解决方案与欧洲市场前沿趋势解析 - 品牌发掘
  • 2026年钢丝绳厂家十大品牌榜单:吊装钢丝绳/进口德国迪帕钢丝绳/电梯钢丝绳/起重钢丝绳/船用钢丝绳/港口起重机与塔吊钢丝绳优质厂家推荐 - 品牌发掘
  • 告别黑盒:深入解读OOMMF MIF 2.1文件,打造你的自定义微磁模拟脚本
  • Qt + FFmpeg 实战:将音视频文件解码为 PCM 数据
  • 2026六安工伤律师事务所推荐排行 权威评测与选择攻略 - 极欧测评
  • 还在一个个打开PSD找素材?教你一招,文件夹里秒看设计稿内容
  • BGP Peer Group保姆级配置指南:用华为/思科设备5分钟搞定邻居批量管理
  • 天津实体门店黄金回收 专业资质齐全 本地老牌商家靠谱不踩坑 - 奢侈品回收评测
  • 12.linux笔记:线程
  • 【资源下载】一款免费驱动,告别付费
  • 2026年6月指路牌灯箱厂家志科推荐指南 - 多才菠萝
  • 湖北孝感青少年封闭管教中心|孩子叛逆/网瘾/厌学/夜不归宿怎么教育|心理特教团队重塑阳光少年 - 辛云教育资讯
  • 靠谱工业冷水机怎么挑?从资质、技术到工况全维度解析 - 信息热点
  • 2026年合肥医药卫生学校怎么报名?招生条件是什么? - cc江江
  • MySQL查看数据库编码、数据表编码、排序规则(乱码问题彻底解决)
  • 从零搭建企业网:手把手教你用eNSP模拟千人校园网络规划(附拓扑与配置)
  • CAD图纸怎么转换为PDF格式?如何将CAD直接导出为PDF?4个方式轻松搞定!