ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python基础:第 06 篇 · 元组 tuple 与字典 dict

Python基础:第 06 篇 · 元组 tuple 与字典 dict

文章目录

  • 专栏导读
  • 第 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) 拼接生成新元组

元组什么时候用

  1. 数据不应该被修改:如坐标(x, y)、RGB 颜色(255, 128, 0)
  2. 作为字典的 key(列表不行)
  3. 函数返回多个值(Python 实际就是返回元组)
  4. 性能略好于列表,遍历稍快

元组解包(超实用)

# 坐标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是统计类任务的利器

练习题

  1. 定义元组存"某商品的名称、单价、库存",用解包取出三个值并打印。
  2. 统计一段英文文本中每个单词出现的次数,输出出现最多的 3 个。
  3. 把两个字典合并(相同 key 的值相加),如{"a":1,"b":2}+{"b":3,"c":4}→{"a":1,"b":5,"c":4}。

下一篇:集合 set——去重和关系运算的利器。

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进