当前位置:首页 > 技术 > 正文内容

Python 字典、元组与集合的核心操作详解

访客 技术 2026年6月21日 1

字典的深入使用与关键方法

字典作为 Python 中最灵活的数据结构之一,支持键值对存储,具备丰富的内置方法。以下是一些核心操作方式。

构造与类型转换

字典可通过嵌套序列进行创建,但要求每个子元素必须包含两个项(键和值):

data = dict([['name', 'Alice'], ['age', 25]])
# 结果: {'name': 'Alice', 'age': 25}

安全访问:get 方法推荐

直接通过键访问可能引发 KeyError,建议使用 get() 方法避免异常:

user_info = {'name': 'Bob', 'role': 'dev'}
print(user_info.get('name'))           # 输出: Bob
print(user_info.get('email'))          # 输出: None
print(user_info.get('email', '未填写')) # 输出: 未填写

增删改操作

  • 修改现有值user_info['role'] = 'lead'
  • 添加新键值对user_info['status'] = 'active'
  • 删除元素
    • 使用 del user_info['role'] 删除指定键
    • 使用 pop('key') 移除并返回值,若键不存在会报错
    • 使用 popitem() 弹出最后一个插入的键值对(LIFO顺序)

批量获取信息

常用"三剑客"方法用于遍历或分析字典内容:

info = {'a': 1, 'b': 2, 'c': 3}

info.keys()    # 返回视图对象: dict_keys(['a', 'b', 'c'])
info.values()  # dict_values([1, 2, 3])
info.items()   # dict_items([('a', 1), ('b', 2), ('c', 3)])

这些结果可用于循环迭代,例如:

for k, v in info.items():
    print(f"{k}: {v}")

特殊构造方法 fromkeys

dict.fromkeys() 可快速生成默认值相同的字典:

defaults = dict.fromkeys(['host', 'port', 'user'], 'unknown')
# {'host': 'unknown', 'port': 'unknown', 'user': 'unknown'}

注意陷阱:当默认值为可变对象(如列表),所有键将共享同一引用:

shared_list = dict.fromkeys(['x', 'y', 'z'], [])
  shared_list['x'].append(1)
  # 所有键的值都会变成 [1]
  

条件性赋值 setdefault

仅在键不存在时设置默认值:

config = {'debug': True}
config.setdefault('timeout', 30)   # 添加
config.setdefault('debug', False)  # 不改变原值
# 最终: {'debug': True, 'timeout': 30}

元组的操作特性

元组是不可变序列,适用于固定数据集合。

基本操作

t = ('apple', 'banana', 'cherry', 'date')

# 索引取值
t[1]        # 'banana'

# 切片(返回新元组)
t[1:3]      # ('banana', 'cherry')
t[::-1]     # ('date', 'cherry', 'banana', 'apple')

# 统计与查找
len(t)      # 4
t.count('banana')  # 1
t.index('cherry')  # 2

注意事项

  • 单元素元组需加逗号:single = (42,)
  • 无法修改、添加或删除元素
  • 一旦创建,其内容和大小均不可更改

集合的应用场景

集合主要用于去重和数学意义上的集合运算。

去重实践

利用集合无重复元素的特性清理列表:

raw_data = [1, 2, 2, 3, 3, 3, 4]
unique_data = list(set(raw_data))
# 注意:顺序可能变化

集合关系运算

假设有两个课程报名名单:

python_class = {'Alice', 'Bob', 'Charlie', 'David'}
java_class = {'Bob', 'Eve', 'Frank', 'David'}

执行常见集合操作:

操作代码结果
交集(同时报名)python_class & java_class{'Bob', 'David'}
并集(所有报名者)python_class | java_class全部五人
差集(仅报 Python)python_class - java_class{'Alice', 'Charlie'}
对称差(只报一门)python_class ^ java_class{'Alice', 'Charlie', 'Eve', 'Frank'}
子集判断python_class > java_classFalse

实战练习示例

统计元素频次并构建字典

names = ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Alice']
frequency = {}
for name in set(names):
    frequency[name] = names.count(name)
# 结果: {'Alice': 3, 'Bob': 2, 'Charlie': 1}

此模式常用于数据分析中的初步计数任务。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。