Python Dictionary Tips and Tricks You Should Always Remember
TL;DR · AI 摘要
Python字典的7个技巧可使代码更简洁、安全且易读,包括使用.get()、defaultdict和|操作符等。
核心要点
- 使用.get()方法避免KeyError并设置默认值。
- 使用defaultdict简化数据分组和计数操作。
- 使用|操作符合并字典,使代码更简洁。
结构提纲
按章节快速跳转。
介绍Python字典的7个技巧,使代码更简洁、安全且易读。
使用.get()方法避免KeyError并设置默认值。
使用defaultdict简化数据分组和计数操作。
使用|操作符合并字典,使代码更简洁。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Python字典技巧
- 避免KeyError
- .get()方法
- 数据分组
- defaultdict
- 合并字典
- |操作符
金句 / Highlights
值得收藏与分享的关键句。
使用.get()方法避免KeyError并设置默认值。
使用defaultdict(int)自动为缺失键创建默认值0。
使用|操作符合并字典,使代码更简洁。
应该始终记住的 Python 字典技巧和窍门 - KDnuggets
publ: 2026年6月19日
- 博客热门文章
- 主题 AI 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps NLP 编程 Python SQL
- 数据集
- 活动
- 资源 快速参考指南 推荐 技术简报
- 广告
加入新闻通讯
#header end
/ad_wrapper
应该始终记住的 Python 字典技巧和窍门
掌握这些技巧,你的字典代码将变得更简洁、更安全、更易于阅读。
By
Kanwal Mehreen
, KDnuggets 技术编辑和内容专家于 2026年6月19日
Python
<div class="addthis_native_toolbox"></div>
# 引言
Python 中的字典对于从配置、JSON 数据到 API 响应的一切都非常有用。大多数初学者只学习基础知识,比如创建字典、访问键和更新值。仅此而已。然而,字典还有更多内容。在本文中,我们将介绍 7 个技巧,使你的代码更整洁、更具 Python 风格。那么,让我们开始吧。
# 使用 .get() 而不是 [] 进行查找
假设你正在使用一个字典,并需要访问一个值。但如果键不存在怎么办?假设我们有一个配置字典,你尝试像这样打印 "timeout" 键:
config = {"debug": True, "verbose": False}
print(config["timeout"])输出:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
----> 2 print(config["timeout"])
KeyError: 'timeout'这将失败。你将得到一个 KeyError,因为 "timeout" 不在字典中。相反,你应该使用 .get() 方法。它更安全,如果键缺失,你可以设置一个默认值。
config = {"debug": True, "verbose": False}
print(config.get("timeout", 30))30这将打印 30,这是我们设置的默认值。但是,如果缺失的键是一个错误,请使用方括号。在这种情况下,你希望错误立即显示出来。
# 使用 defaultdict 进行数据分组
如果你正在处理一个单词列表,并且想要计算每个单词出现的次数,你可能会这样编写代码:
words = ["apple", "banana", "apple", "cherry", "banana", "banana"]
counts = {}
for word in words:
if word not in counts:
counts[word] = 0
counts[word] += 1
print(counts){'apple': 2, 'banana': 3, 'cherry': 1}这有效,但有点冗长。Python 的 defaultdict 使其更简洁:
from collections import defaultdict
words = ["apple", "banana", "apple", "cherry", "banana", "banana"]
counts = defaultdict(int)
for word in words:
counts[word] += 1
print(counts)defaultdict(
, {'apple': 2, 'banana': 3, 'cherry': 1})因为我们使用了 defaultdict(int),每当访问一个缺失的键时,Python 会自动创建一个默认值 0。
# 使用 | 运算符合并字典
在现代 Python 中,合并字典最干净的方式是使用 | 运算符。
defaults = {"color": "blue", "size": "medium"}
overrides = {"size": "large", "weight": "heavy"}
merged = defaults | overrides
print(merged){'color': 'blue', 'size': 'large', 'weight': 'heavy'}当键重叠时,右边的字典会胜出。如果你想进行原地合并,可以使用 |= 运算符:
defaults |= overrides
print(defaults)# 将字典解包为函数参数
假设你有一个函数和一个字典,它们的字段或键匹配。你不需要一个一个地传递键,比如 name=data["name"], age=data["age"],而是可以使用 ** 双星号运算符一次性传递所有内容。让我们创建一个用户函数和一些虚拟用户数据来理解这一点:
def create_user(name, age, role="viewer"):
return {"name": name, "age": age, "role": role}
user_data = {
"name": "David",
"age": 33
}# 正常方式
user = create_user(
name=user_data["name"],
age=user_data["age"],
role=user_data["role"]
)
print(user){'name': 'David', 'age': 33, 'role': 'viewer'}# 使用 **
print(create_user(**user_data))请注意,上面“正常方式”的示例会引发一个 KeyError,因为 user_data 中不包含 "role" 键。使用 ** 解包方法可以正确回退到函数中 role 的默认值,使代码更加简洁和健壮。
# 在字典中使用海象运算符
Python 3.8 引入了海象运算符 ( := ),它允许你在表达式中进行赋值。这在字典中非常有用。
假设你有一个字典,你想获取用户数据及其名称(如果存在)。通常你会这样编写代码:
data = {
"user": {
"name": "Bryan",
"email": "bryan@gmail.com"
}
}
if data.get("user") is not None:
user = data.get("user")
name = user.get("name")
print(name)Bryan这可以工作,但它会多次重复查找字典。你可以使用海象运算符 ( := ) 来代替,它可以在一步中查找并赋值:
if (user := data.get("user")) is not None:
name = user.get("name")
print(name)这在处理嵌套字典结构时特别有用。
# 使用 TypedDict 进行结构化数据
字典很灵活,但这种灵活性有时会成为问题。例如:
def greet(user):
return f"Hello, {user['name']}!"
user = {
"name": "Clair",
"age": "thirty"
}
print(greet(user))Hello, Clair!这在运行时可以工作,但有一个隐藏的问题:"age" 应该是数字而不是字符串。Python 本身不会抱怨,这可能会导致大型项目中出现错误。TypedDict 明确指定了预期的字典结构:
from typing import TypedDict
class UserProfile(TypedDict):
name: str
age: int
def greet(user: UserProfile) -> str:
return f"Hello, {user['name']}!"现在像 mypy 这样的工具可以在代码运行之前捕获错误:
user: UserProfile = {
"name": "Clair",
"age": "thirty",
}
print(greet(user))test.py:15: error: Incompatible types (expression has type "str", TypedDict item "age" has type "int") [typeddict-item]
Found 1 error in 1 file (checked 1 source file)对于更复杂的验证,dataclasses 或 Pydantic 等工具通常是更好的选择。
# 轻松迭代:.items()、.keys()、.values()
Python 字典有许多内置的迭代方法:.items()、.keys() 和 .values()。大多数开发人员都知道这些方法,但可能没有像应该的那样频繁使用它们。他们可能会像这样遍历字典:
scores = {
"David": 92,
"Bryan": 87,
"Clair": 95
}
for name in scores:
print(name, scores[name])David 92
Bryan 87
Clair 95这样是可以运行的。但并不是最佳方式 —— 它在每次循环时都会进行一次额外的字典查找。Python 的 .items() 方法更加简洁:
for name, score in scores.items():
print(name, score)它同时返回键和值,这样可以避免重复查找,并使代码更易读。如果你只需要键,可以使用 .keys()。同样,如果你只需要值,可以使用 .values()。
# 总结
Python 字典乍看之下似乎很简单,但学习一些关键的模式可以使你的代码更加整洁。你可以使用这个链接来了解更多关于 Python 字典相关函数的内容。像 .get()、defaultdict、解包和 TypedDict 这样的特性可以帮助减少重复代码,并使你的程序更加可靠。
Kanwal Mehreen 是一位机器学习工程师和技术作家,对数据科学以及人工智能与医学的交叉领域有着浓厚的热情。她与他人合著了电子书《利用 ChatGPT 提高生产力》。作为 2022 年 Google Generation Scholar(亚太地区),她倡导多样性和学术卓越。她还被认定为 Teradata 技术领域多样性学者、Mitacs Globalink 研究学者和哈佛 WeCode 学者。Kanwal 是变革的坚定倡导者,她创立了 FEMCodes 以激励女性在 STEM 领域的发展。
更多关于此主题的内容
- LLM 微调和推理的 5 个技巧和窍门
- 高级 NotebookLM 技巧和窍门(面向高级用户)
- 7 个 Pandas 技巧,可以为你节省时间
- 如果你想成为数据分析师,应该考虑的 3 门课程
- 7 个 Python EDA 技巧,用于发现和修复数据问题
- 数据科学家应该始终记住的 10 个高级 Python 技巧
<hr class="grey-line"><br> <div><h3>我们推荐的 5 门免费课程</h3><br> </div>
Mailchimp for WordPress v4.13.0 - https://wordpress.org/plugins/mailchimp-for-wp/
/ Mailchimp for WordPress 插件
你可以从这里开始编辑。
如果评论已关闭。
<= 上一篇
下一篇 =>
#content end
<script type="text/javascript">kda_sid_write(kda_sid_n);</script>
最新文章
- 为新手解释损失函数(模型如何知道它们是错误的)实用 SQL 技巧,每位数据科学家都应该知道 Python 字典技巧和窍门,你应该始终记住 Python 高级连接技巧:LATERAL 连接、半连接、反连接 如何(以及为什么)我构建了一个 AI 助手 使用 OpenAI Codex 的 5 个有趣项目
热门文章
- 将 Claude Code 与本地模型结合使用
- 获取创业点子资金的 7 个最佳方式
- 2026 年成为 LLM 工程师的路线图
- 低成本本地代理编程:Claude Code + Ollama + Gemma4
- Anthropic 的 Claude 技能构建完整指南
- 如何(以及为什么)我构建了一个 AI 助手
- 使用 Python 中的 sktime 构建时间序列机器学习模型
- 使用 OpenAI Codex 的 5 个有趣项目
- 停止在 Pandas 中编写循环:尝试 7 个更快的替代方法
- 5 个有用的 Python 脚本,用于自动化无聊的 PDF 任务
#content_wrapper end
© 2026
Guiding Tech Media
|
关于
联系
广告
隐私
服务条款
发布于 2026 年 6 月 19 日
blank
不,谢谢!
/.main_wrapper
<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>
noptimize
/noptimize