文章目录
- 专栏导读
- 第 06 篇 · 元组 tuple 与字典 dict
- 本篇目标
- 第一部分:元组 tuple
- 创建元组
- 元组不可变
- 元组支持的操作
- 元组什么时候用
- 元组解包(超实用)
- 第二部分:字典 dict
- 创建字典
- 查
- 增 / 改
- 删
- 遍历
- 其他常用方法
- 字典推导式
- 实战:统计词频
- 常见坑
- 本篇小结
- 练习题
- 总结
专栏导读
🔥🔥本文已收录于《30天学习Python从入门到精通》
🉑🉑本专栏专门
针对于零基础和需要重新复习巩固的同学所准备的一套基础班教学,从0基础到精通Python,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢
迎订阅《Python办公自动化》专栏,订阅地址:点我直达
第 06 篇 · 元组 tuple 与字典 dict
作者:小庄学Python | 系列:《Python基础大全》 · 30 篇从零到能写项目
本篇目标
- 搞懂元组"不可变"到底是什么意思、什么时候用
- 掌握字典的增删改查与遍历
- 学会字典推导式与
get()的安全取值 - 掌握元组/字典解包的实用技巧
第一部分:元组 tuple
创建元组
t1=(1,2,3)t2=1,2,3# 括号可以省略,但不建议t3=()# 空元组t4=(1,)# 单元素元组,逗号必须有!t5=(1)# ❌ 这不是元组,就是数字 1单元素元组的逗号是新手必踩的坑。
元组不可变
t=(1,2,3)t[0]=100# ❌ TypeError但如果元组里有可变元素,那个元素本身可以改:
t=([1,2],"hello")t[0].append(3)print(t)# ([1, 2, 3], 'hello') ← 能改,因为改的是列表元组支持的操作
t=(1,2,3,2)len(t)# 4t[0]# 1t[::-1]# (2, 3, 2, 1) 切片返回元组t.count(2)# 2t.index(3)# 23int# Truet+(4,5)# (1, 2, 3, 2, 4, 5) 拼接生成新元组元组什么时候用
- 数据不应该被修改:如坐标
(x, y)、RGB 颜色(255, 128, 0) - 作为字典的 key(列表不行)
- 函数返回多个值(Python 实际就是返回元组)
- 性能略好于列表,遍历稍快
元组解包(超实用)
# 坐标x,y=(10,20)# 交换变量a,b=b,a# 函数返回多个值defget_user():return"小庄",18,"北京"name,age,city=get_user()# 用 * 收集剩余first,*rest=[1,2,3,4]print(first)# 1print(rest)# [2, 3, 4]# 只要首尾head,*_,tail=[1,2,3,4,5]print(head,tail)# 1 5第二部分:字典 dict
字典是**键值对(key-value)**的无序集合,查询速度极快。
创建字典
user={"name":"小庄","age":18,"city":"北京"}empty={}empty2=dict()# 从键值对序列创建dict([("a",1),("b",2)])# {'a': 1, 'b': 2}dict(name="小庄",age=18)# {'name': '小庄', 'age': 18}查
user={"name":"小庄","age":18}user["name"]# 小庄user["gender"]# ❌ KeyError!user.get("gender")# None 安全,不会报错user.get("gender","未知")# 未知 带默认值"name"inuser# True 查 key 是否存在永远优先用
get(),除非你确定 key 一定存在。
增 / 改
user["gender"]="男"# key 不存在 = 新增user["age"]=20# key 存在 = 修改user.update({"age":21,"job":"程序员"})# 批量更新删
user.pop("city")# 删除并返回该值user.pop("xxx",None)# 不存在时返回 None,不报错deluser["age"]# 直接删user.clear()# 清空遍历
user={"name":"小庄","age":18,"city":"北京"}# 遍历 key(默认)forkinuser:print(k)# 遍历 valueforvinuser.values():print(v)# 遍历键值对(最常用)fork,vinuser.items():print(f"{k}:{v}")其他常用方法
user.keys()# 所有 keyuser.values()# 所有 valueuser.items()# 所有键值对len(user)# 3user.setdefault("level",1)# 有就返回原值,没有就设置字典推导式
# 生成平方映射{i:i**2foriinrange(5)}# {0:0, 1:1, 2:4, 3:9, 4:16}# 过滤{k:vfork,vinuser.items()ifv}# 键值互换{v:kfork,vind.items()}# 两个列表合成字典keys=["a","b","c"]vals=[1,2,3]dict(zip(keys,vals))# {'a': 1, 'b': 2, 'c': 3}实战:统计词频
text="apple banana apple orange banana apple"words=text.split()count={}forwordinwords:count[word]=count.get(word,0)+1print(count)# {'apple': 3, 'banana': 2, 'orange': 1}Python 标准库给了更简洁的做法:
fromcollectionsimportCounter count=Counter(words)print(count.most_common(2))# [('apple', 3), ('banana', 2)]常见坑
| 坑 | 说明 |
|---|---|
| 单元素元组要加逗号 | (1)是整数,(1,)才是元组 |
d["key"]不存在会 KeyError | 用d.get("key", default) |
| 遍历字典时增删 | 会报错,先list(d.keys())转副本 |
| 列表不能做字典 key | 列表不可哈希,用元组代替 |
| Python 3.7 之前字典无序 | 现在有序,但别依赖顺序做逻辑 |
# 遍历时删除的正确写法d={"a":1,"b":2,"c":3}forkinlist(d.keys()):ifd[k]<3:d.pop(k)本篇小结
- 元组不可变,适合存坐标、配置、做字典 key;解包很方便
- 字典查改都用
get()更安全 - 遍历键值对用
.items() - 推导式、
zip()、Counter是统计类任务的利器
练习题
- 定义元组存"某商品的名称、单价、库存",用解包取出三个值并打印。
- 统计一段英文文本中每个单词出现的次数,输出出现最多的 3 个。
- 把两个字典合并(相同 key 的值相加),如
{"a":1,"b":2}+{"b":3,"c":4}→{"a":1,"b":5,"c":4}。
下一篇:集合 set——去重和关系运算的利器。
总结
希望对初学者有帮助
致力于办公自动化的小小程序员一枚
希望能得到大家的【一个免费关注】!感谢
求个 🤞 关注 🤞
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
求个 ❤️ 喜欢 ❤️
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
求个 👍 收藏 👍
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏