KDnuggets

Python Dictionary Tips and Tricks You Should Always Remember

8.5内容质量

TL;DR · AI 摘要

Python字典的7个技巧可使代码更简洁、安全且易读,包括使用.get()、defaultdict和|操作符等。

核心要点

  • 使用.get()方法避免KeyError并设置默认值。
  • 使用defaultdict简化数据分组和计数操作。
  • 使用|操作符合并字典,使代码更简洁。

结构提纲

按章节快速跳转。

  1. 介绍Python字典的7个技巧,使代码更简洁、安全且易读。

  2. 使用.get()方法避免KeyError并设置默认值。

  3. ·Using defaultdict for Grouping Data

    使用defaultdict简化数据分组和计数操作。

  4. 使用|操作符合并字典,使代码更简洁。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Python字典技巧
    • 避免KeyError
      • .get()方法
    • 数据分组
      • defaultdict
    • 合并字典
      • |操作符

金句 / Highlights

值得收藏与分享的关键句。

#Python#编程技巧#数据结构
打开原文

应该始终记住的 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" 键:

code
config = {"debug": True, "verbose": False}
print(config["timeout"])

输出:

code
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
----> 2 print(config["timeout"])
KeyError: 'timeout'

这将失败。你将得到一个 KeyError,因为 "timeout" 不在字典中。相反,你应该使用 .get() 方法。它更安全,如果键缺失,你可以设置一个默认值。

code
config = {"debug": True, "verbose": False}

print(config.get("timeout", 30))
code
30

这将打印 30,这是我们设置的默认值。但是,如果缺失的键是一个错误,请使用方括号。在这种情况下,你希望错误立即显示出来。

# 使用 defaultdict 进行数据分组

如果你正在处理一个单词列表,并且想要计算每个单词出现的次数,你可能会这样编写代码:

code
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)
code
{'apple': 2, 'banana': 3, 'cherry': 1}

这有效,但有点冗长。Python 的 defaultdict 使其更简洁:

code
from collections import defaultdict

words = ["apple", "banana", "apple", "cherry", "banana", "banana"]

counts = defaultdict(int)

for word in words:
    counts[word] += 1

print(counts)
code
defaultdict(
, {'apple': 2, 'banana': 3, 'cherry': 1})

因为我们使用了 defaultdict(int),每当访问一个缺失的键时,Python 会自动创建一个默认值 0。

# 使用 | 运算符合并字典

在现代 Python 中,合并字典最干净的方式是使用 | 运算符。

code
defaults = {"color": "blue", "size": "medium"}
overrides = {"size": "large", "weight": "heavy"}

merged = defaults | overrides
print(merged)
code
{'color': 'blue', 'size': 'large', 'weight': 'heavy'}

当键重叠时,右边的字典会胜出。如果你想进行原地合并,可以使用 |= 运算符:

code
defaults |= overrides
print(defaults)

# 将字典解包为函数参数

假设你有一个函数和一个字典,它们的字段或键匹配。你不需要一个一个地传递键,比如 name=data["name"], age=data["age"],而是可以使用 ** 双星号运算符一次性传递所有内容。让我们创建一个用户函数和一些虚拟用户数据来理解这一点:

code
def create_user(name, age, role="viewer"):
    return {"name": name, "age": age, "role": role}

user_data = {
    "name": "David",
    "age": 33
}
code
# 正常方式
user = create_user(
    name=user_data["name"],
    age=user_data["age"],
    role=user_data["role"]
)

print(user)
code
{'name': 'David', 'age': 33, 'role': 'viewer'}
code
# 使用 **
print(create_user(**user_data))

请注意,上面“正常方式”的示例会引发一个 KeyError,因为 user_data 中不包含 "role" 键。使用 ** 解包方法可以正确回退到函数中 role 的默认值,使代码更加简洁和健壮。

# 在字典中使用海象运算符

Python 3.8 引入了海象运算符 ( := ),它允许你在表达式中进行赋值。这在字典中非常有用。

假设你有一个字典,你想获取用户数据及其名称(如果存在)。通常你会这样编写代码:

code
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)
code
Bryan

这可以工作,但它会多次重复查找字典。你可以使用海象运算符 ( := ) 来代替,它可以在一步中查找并赋值:

code
if (user := data.get("user")) is not None:
    name = user.get("name")

    print(name)

这在处理嵌套字典结构时特别有用。

# 使用 TypedDict 进行结构化数据

字典很灵活,但这种灵活性有时会成为问题。例如:

code
def greet(user):
    return f"Hello, {user['name']}!"

user = {
    "name": "Clair",
    "age": "thirty"
}

print(greet(user))
code
Hello, Clair!

这在运行时可以工作,但有一个隐藏的问题:"age" 应该是数字而不是字符串。Python 本身不会抱怨,这可能会导致大型项目中出现错误。TypedDict 明确指定了预期的字典结构:

code
from typing import TypedDict

class UserProfile(TypedDict):
    name: str
    age: int

def greet(user: UserProfile) -> str:
    return f"Hello, {user['name']}!"

现在像 mypy 这样的工具可以在代码运行之前捕获错误:

code
user: UserProfile = {
    "name": "Clair",
    "age": "thirty",
}

print(greet(user))
code
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()。大多数开发人员都知道这些方法,但可能没有像应该的那样频繁使用它们。他们可能会像这样遍历字典:

code
scores = {
    "David": 92,
    "Bryan": 87,
    "Clair": 95
}

for name in scores:
    print(name, scores[name])
code
David 92
Bryan 87
Clair 95

这样是可以运行的。但并不是最佳方式 —— 它在每次循环时都会进行一次额外的字典查找。Python 的 .items() 方法更加简洁:

code
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