Python字典核心秘籍:从键值对到嵌套结构,20+实战案例轻松掌握


Python字典(Dictionary)知识点教程


一、字典的定义与特性

  1. 定义:字典是可变的无序的键值对集合,用花括号 {} 定义,键值对用 键: 值 表示。
person = {"name": "Alice", "age": 25}
empty_dict = {}  # 空字典
  1. 特性
    • 键唯一性:键必须是不可变类型(如字符串、数字、元组),且不可重复。
    • 值无限制:值可以是任意数据类型(包括列表、字典等)。
    • 高效查找:通过键直接访问值,时间复杂度为 O(1)。

二、字典的基本操作

操作

示例

说明

访问值

person["name"] → "Alice"

通过键获取值(键不存在时报错)

添加/修改键值对

person["city"] = "New York"

键存在则修改,不存在则添加

删除键值对

del person["age"]

删除指定键的键值对

检查键是否存在

"name" in person → True

判断键是否在字典中


三、字典常用方法

方法

示例

功能说明

dict.get(key, default)

person.get("age", 0) → 25

安全获取值(键不存在返回 default)

dict.keys()

person.keys() → ["name", "age"]

返回所有键的视图对象

dict.values()

person.values() → ["Alice", 25]

返回所有值的视图对象

dict.items()

person.items() → [("name", "Alice"), ("age", 25)]

返回所有键值对的视图对象

dict.update(other)

person.update({"age": 26})

合并其他字典的键值对(覆盖重复键)

dict.pop(key)

person.pop("age") → 25

删除键并返回对应的值

dict.clear()

person.clear() → {}

清空字典


四、字典推导式

  • 快速生成字典:
squares = {x: x**2 for x in range(5)}  # {0:0, 1:1, 2:4, 3:9, 4:16}

五、嵌套字典

  • 字典的值可以是字典或其他容器:
students = {
    "Alice": {"age": 20, "grade": "A"},
    "Bob": {"age": 22, "grade": "B"}
}
print(students["Alice"]["age"])  # 20

20道练习题 & 答案

基础题

  1. 创建字典 {"a": 1, "b": 2},输出键 "b" 的值。
    答案:print({"a":1, "b":2}["b"]) → 2
  2. 添加键值对 "c": 3 到字典 d = {"a": 1} 中。
    答案:d["c"] = 3
  3. 删除字典 {"x": 10, "y": 20} 中的键 "x"
    答案:del d["x"] 或 d.pop("x")
  4. 检查键 "name" 是否在字典 person = {"age": 25} 中。
    答案:print("name" in person) → False
  5. 合并两个字典 d1 = {"a":1}d2 = {"b":2}
    答案:d1.update(d2) → {"a":1, "b":2}

进阶题

  1. get 方法安全获取字典 {"a": 1} 中键 "b" 的值,默认返回 0
    答案:d.get("b", 0) → 0
  2. 将字典 {"a":1, "b":2} 的键和值分别转换为列表。
    答案
keys = list(d.keys())    # ["a", "b"]
values = list(d.values()) # [1, 2]
  1. 用字典推导式生成 {1: 1, 2: 4, 3: 9}
    答案:{x: x**2 for x in [1,2,3]}
  2. 遍历字典 {"a":1, "b":2},打印键值对。
    答案
for key, value in d.items():
    print(key, value)  # a 1 \n b 2
  1. 将列表 ["a", "b", "c"] 转换为字典,值设为索引。
    答案:{k: i for i, k in enumerate(lst)} → {"a":0, "b":1, "c":2}

应用题

  1. 统计字符串 "apple" 中每个字符的出现次数。
    答案
s = "apple"
count = {}
for char in s:
    count[char] = count.get(char, 0) + 1
print(count)  # {'a':1, 'p':2, 'l':1, 'e':1}
  1. 将两个列表合并为字典:keys = ["a", "b"], values = [1, 2]
    答案:dict(zip(keys, values)) → {"a":1, "b":2}
  2. 反转字典的键和值:{"a":1, "b":2}{1:"a", 2:"b"}
    答案
reversed_dict = {v: k for k, v in d.items()}
  1. 筛选字典 {"a":5, "b":1, "c":8} 中值大于 3 的键值对。
    答案
{k: v for k, v in d.items() if v > 3}  # {"a":5, "c":8}
  1. 处理嵌套字典,获取 students["Alice"]["age"] 的值。
    答案
students = {"Alice": {"age": 20}}
print(students["Alice"]["age"])  # 20

挑战题

  1. 合并多个字典(重复键的值相加):d1 = {"a":1}, d2 = {"a":2, "b":3}
    答案
from collections import defaultdict
merged = defaultdict(int)
for d in [d1, d2]:
    for k, v in d.items():
        merged[k] += v
print(dict(merged))  # {"a":3, "b":3}
  1. 按值对字典 {"a":3, "b":1, "c":2} 排序。
    答案
sorted_dict = dict(sorted(d.items(), key=lambda x: x[1]))  # {"b":1, "c":2, "a":3}
  1. 将字典转换为 JSON 字符串(使用 json 模块)。
    答案
import json
json_str = json.dumps({"a":1})  # '{"a": 1}'
  1. 实现字典的深拷贝(嵌套字典完全独立)。
    答案
import copy
d1 = {"a": [1,2]}
d2 = copy.deepcopy(d1)
  1. 找出两个字典的公共键:d1 = {"a":1, "b":2}, d2 = {"b":3, "c":4}
    答案
common_keys = d1.keys() & d2.keys()  # {"b"}

通过练习,可以熟练掌握Python字典的核心操作、高级用法及实际场景应用!

相关文章

探索 Python 中合并两个字典的七种方法,找到最适合你的那一款!

在 Python 的世界里,字典作为一种强大的数据结构,扮演着举足轻重的角色。而合并字典,则是我们经常遇到的操作。Python 为我们提供了多种合并字典的方式,每种方式都有其独特的应用场景。探索 Py...

python将两个字典进行合并的方法

在 Python 中,可以使用 update() 方法将一个字典合并到另一个字典中,也可以使用运算符 | 或 ** 将两个字典合并为一个新的字典。以下是示例代码,演示了三种不同的方式来合并字典:# 定...

Python 字典合并、求和大作战,轻松搞定各路数据

在使用 Python 采集来自不同渠道的数据,很多都是以字典的形式存储。将它们合并、处理是经常使用的进本操作,在本文中,我们将介绍多种合并和求和字典的方法。合并词典是指涉及将多个词典中的键值对合并到一...

Python 嵌套词典完整指南

当需要在 Python 中组织复杂的分层数据时,嵌套词典是必不可少的。它们对于处理 JSON 数据、配置设置或任何具有多个级别的结构化数据特别有用。了解嵌套词典嵌套词典只是包含其他词典作为值的词典。下...

一文掌握Python的字典

字典是 Python 中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级 Python 开发人...

如何在 Python 中创建一个不可变的字典 - Adam Johnson

Python 的内置集合类型具有可变和不可变两种风格:可变版本:list 不可变版本:tuple可变版本:set 不可变版本:frozenset可变版本:dict 不可变版本:MappingProxy...