当前位置: 首页 > java >正文

Python 字典的用法和技巧

字典的创建与初始化

Python 字典是一种可变容器模型,可存储任意类型对象。字典的每个键值对用冒号分隔,键值对之间用逗号分隔,整个字典包括在花括号中。

# 创建一个空字典
empty_dict = {}# 创建一个包含键值对的字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}

字典的访问与修改

通过键可以访问字典中的值,如果键不存在,会抛出 KeyError 异常。可以使用 get 方法来避免异常,并返回默认值。

# 访问字典中的值
print(my_dict['name'])  # 输出: Alice# 修改字典中的值
my_dict['age'] = 26
print(my_dict)  # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York'}# 使用 get 方法访问不存在的键
print(my_dict.get('gender', 'Unknown'))  # 输出: Unknown

字典的遍历

可以使用 for 循环遍历字典的键、值或键值对。

# 遍历字典的键
for key in my_dict:print(key)# 遍历字典的值
for value in my_dict.values():print(value)# 遍历字典的键值对
for key, value in my_dict.items():print(f"{key}: {value}")

字典的合并

可以使用 update 方法将一个字典的键值对合并到另一个字典中。如果键已存在,则更新其值。

# 合并两个字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

字典的推导式

字典推导式是一种简洁的创建字典的方法,类似于列表推导式。

# 使用字典推导式创建字典
squares = {x: x**2 for x in range(6)}
print(squares)  # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

字典的排序

字典本身是无序的,但可以通过 sorted 函数对字典的键或值进行排序。

# 对字典的键进行排序
sorted_keys = sorted(my_dict.keys())
print(sorted_keys)  # 输出: ['age', 'city', 'name']# 对字典的值进行排序
sorted_values = sorted(my_dict.values())
print(sorted_values)  # 输出: [26, 'Alice', 'New York']

字典的嵌套

字典可以嵌套其他字典,形成复杂的数据结构。

# 创建一个嵌套字典
nested_dict = {'person1': {'name': 'Alice', 'age': 25},'person2': {'name': 'Bob', 'age': 30}
}# 访问嵌套字典中的值
print(nested_dict['person1']['name'])  # 输出: Alice

字典的删除

可以使用 del 语句删除字典中的键值对,或使用 pop 方法删除并返回指定键的值。

# 删除字典中的键值对
del my_dict['city']
print(my_dict)  # 输出: {'name': 'Alice', 'age': 26}# 使用 pop 方法删除并返回值
age = my_dict.pop('age')
print(age)  # 输出: 26
print(my_dict)  # 输出: {'name': 'Alice'}

字典的默认值

可以使用 collections.defaultdict 来创建一个默认值字典,当访问不存在的键时,返回默认值。

from collections import defaultdict# 创建一个默认值为 0 的字典
default_dict = defaultdict(int)
default_dict['a'] += 1
print(default_dict)  # 输出: defaultdict(<class 'int'>, {'a': 1})

 

字典的浅拷贝与深拷贝

使用 copy 方法可以进行字典的浅拷贝,使用 copy.deepcopy 可以进行深拷贝。

import copy# Original dictionary with nested structure
original_dict = {'name': 'Alice','age': 30,'address': {'street': '123 Main St','city': 'Wonderland'}
}# Create a shallow copy of the original dictionary
shallow_copied_dict = original_dict.copy()# Create a deep copy of the original dictionary
deep_copied_dict = copy.deepcopy(original_dict)# Modify the nested dictionary in the original
original_dict['address']['city'] = 'New Wonderland'# Print out all dictionaries
print("Original Dictionary:")
print(original_dict)print("\nShallow Copied Dictionary:")
print(shallow_copied_dict)print("\nDeep Copied Dictionary:")
print(deep_copied_dict)

字典的键值查找

可以使用 in 关键字检查字典中是否存在某个键或值。

my_dict = {'name': 'Alice','age': 30,'city': 'Wonderland'
}# 检查字典中是否存在某个键
print('name' in my_dict)  # 输出: True# 检查字典中是否存在某个值
print('Alice' in my_dict.values())  # 输出: True

 

字典的键值去重

可以使用 set 对字典的键值进行去重。

my_dict = {'person1': 'Alice','person2': 'Bob','person3': 'Alice',  # 重复的值'person4': 'Charlie','person5': 'Bob'      # 重复的值
}unique_values = set(my_dict.values())
print(unique_values)  

 

http://www.xdnf.cn/news/7739.html

相关文章:

  • 设计模式介绍
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Hidden Search Widget (交互式搜索框)
  • 企业网站架构部署与优化-Nginx核心功能
  • Quasar 使用 Pinia 进行状态管理
  • C#SQLServer数据库通用访问类
  • 电子电路:什么是射极电阻?
  • 构建安全的Vue前后端分离架构:利用长Token与短Token实现单点登录(SSO)策略
  • 多线程环境下结构体赋值是否具有原子性?
  • Java 线程池 ThreadPoolExecutor
  • SAP-ABAP:SAP的BAPI_PO_CHANGE功能详解
  • 9 定时任务与周期性调度
  • 活到老学到老-Spring注解-如何创建get和set
  • C++面向对象——多态
  • 进程之IPC通信一
  • 内核常见面试问题汇总
  • PN结的形成及特性
  • 技术派项目——注册登录(用户名密码的方式)
  • 瀚高安全版4.5.8/4.5.9字符串默认按字节存储导致数据无法写入(APP)
  • 前端流行框架Vue3教程:20. 插槽slot(2)
  • leetcode 找到字符串中所有字母异位词 java
  • 牛顿迭代法求解除法
  • C语言中三个点代表什么含义...
  • LeetCode 438. 找到字符串中所有字母异位词 | 滑动窗口与字符计数数组解法
  • base算法
  • Web开发-Python应用Flask框架Jinja模版绑定路由参数传递页面解析SSTI注入
  • Baumer工业相机堡盟工业相机的工业视觉如何使用三色光进行字符识别检测
  • 第十六届C++B组easyQuestions
  • AI产品经理课程推荐
  • 2025ICPC南昌邀请赛-G
  • 【实验增效】5 μL/Test 高浓度液体试剂!Elabscience PE Anti-Mouse Ly6G抗体 简化流式细胞术流程