20个Python字典映射技巧,让数据处理更高效

字典作为Python的日常工具,拥有快速查找、高效存储等特性,是数据处理的必备神器。让我们一起揭开它的15个隐藏技巧,让你的代码飞起来!

1. 初始化小技巧:快速创建字典

python 复制代码
# 使用zip函数结合列表,一键成字典
keys = ['name', 'age']
values = ['Alice', 24]
my_dict = dict(zip(keys, values))
print(my_dict)

这个小魔法直接将两个列表配对成字典,是不是很神奇?

2. 字典推导式,简洁之美

python 复制代码
numbers = [1, 2, 3, 4]
squares = {num: num*num for num in numbers}
print(squares)

一行代码,数字变平方,推导式让你的代码优雅到不行!

3. 获取键不存在的默认值,避免KeyError

python 复制代码
my_dict = {'name': 'Bob'}
print(my_dict.get('age', 'Not Found'))  # 不怕找不到,直接告诉你"Not Found"

这招用get方法,安全访问,妈妈再也不担心我遇到KeyError了。

4. 删除键值对,干净利落

python 复制代码
# pop方法,删除并返回值
age = my_dict.pop('age', 'Already gone')  # 如果不存在,就默认返回'Already gone'
print(age)
print(my_dict)  # 看,'age'没了

pop一出,谁与争锋,键值对消失无踪。

5. 更新字典,合并高手

python 复制代码
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1)  # 'b'的值被更新,'c'加入,合并就这么简单

update方法,字典合并不费吹灰之力。

6. 遍历字典,洞察每个角落

python 复制代码
for key, value in my_dict.items():
    print(f"Key: {key}, Value: {value}")

items方法让我们遍历得明明白白,每一个键值对都不放过。

7. 只取键,或只取值

python 复制代码
keys_only = my_dict.keys()
values_only = my_dict.values()
print(list(keys_only))  # 转成列表方便查看
print(list(values_only))

keys和values方法,让你专注你想要的那部分。

8. 检查键是否存在,一步到位

python 复制代码
if 'age' in my_dict:
    print("Age is there!")
else:
    print("Sorry, no age.")

直接用in,检查键是否存在,就是这么直接。

9. 字典长度,一目了然

python 复制代码
print(len(my_dict))  # 瞬间知道字典大小

len函数,快速统计字典的键数量。

10. 字典排序,按值或按键

python 复制代码
# 按值排序
sorted_dict = sorted(my_dict.items(), key=lambda x: x[1])
print(sorted_dict)

# 按键排序
sorted_by_key = sorted(my_dict.items())
print(sorted_by_key)

排序函数+lambda表达式,按需排序,灵活自如。

11. 字典转列表,形式转换

python 复制代码
list_of_tuples = list(my_dict.items())
print(list_of_tuples)

轻松转换,数据形态任你玩转。

12. 清空字典,重头再来

python 复制代码
my_dict.clear()
print(my_dict)  # 空空如也,准备迎接新的数据

clear方法,一切从零开始。

13. 字典嵌套,数据结构的魔术

python 复制代码
nested_dict = {
    'person1': {'name': 'Alice', 'age': 24},
    'person2': {'name': 'Bob', 'age': 30}
}
print(nested_dict['person1']['name'])  # 访问内层,深挖数据

像俄罗斯套娃一样,一层又一层,复杂数据轻松管理。

14. 利用fromkeys创建初始化字典

python 复制代码
keys_list = ['name', 'age', 'city']
default_values = None
my_init_dict = dict.fromkeys(keys_list, default_values)
print(my_init_dict)  # 统一初始值,批量创建

fromkeys,批量初始化,效率满满。

15. 字典解包,操作升级

python 复制代码
dict_a = {'x': 1, 'y': 2}
dict_b = {'y': 3, 'z': 4}
{**dict_a, **dict_b}  # **操作符,解包合并,新字典诞生

星号解包,合并字典新姿势,简洁而强大。


进阶使用和高级技巧

16. 使用defaultdict避免KeyError

python 复制代码
from collections import defaultdict

# 创建一个默认值为列表的字典
my_default_dict = defaultdict(list)
my_default_dict['fruits'].append('apple')
my_default_dict['fruits'].append('banana')
print(my_default_dict)

defaultdict自动初始化键对应的值,这里用列表,添加元素变得异常简单,无需每次都检查键是否存在。

17. 字典的深拷贝与浅拷贝

python 复制代码
import copy

original_dict = {'a': [1, 2], 'b': 3}
shallow_copy = copy.copy(original_dict)
deep_copy = copy.deepcopy(original_dict)

# 修改原字典中的列表
original_dict['a'][0] = 99

print("Original:", original_dict)
print("Shallow Copy:", shallow_copy)  # 浅拷贝受影响
print("Deep Copy:", deep_copy)  # 深拷贝不受影响

了解深浅拷贝的区别,对于处理包含可变对象(如列表)的字典至关重要。

18. 字典的视图对象:动态观察变化

python 复制代码
my_dict = {'name': 'Alice', 'age': 24}
keys_view = my_dict.keys()
print("Initial Keys:", keys_view)

# 添加新的键值对
my_dict['city'] = 'Wonderland'
print("Keys after update:", keys_view)  # 视图自动更新

字典的keys(), values(), items()返回的是视图对象,可以实时反映字典的变化。

19. 高级字典推导式:多层映射

python 复制代码
data = [('John', 'Doe', 23), ('Jane', 'Doe', 24)]
people = {f"{first} {last}": age for first, last, age in data}
print(people)

利用列表中的子列表,通过字典推导式快速构建复杂的映射关系。

20. 使用dict.setdefault(),访问与初始化二合一

python 复制代码
my_dict = {}
my_dict.setdefault('score', []).append(90)
my_dict.setdefault('score', []).append(95)
print(my_dict)  # 避免了多次检查和初始化

如果键不存在,则初始化并返回该键对应的值,否则直接返回已有的值,非常实用。

相关推荐
SEEONTIME2 分钟前
python-24-一篇文章彻底掌握Python HTTP库Requests
开发语言·python·http·http库requests
Bearnaise2 分钟前
PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)
论文阅读·笔记·python·深度学习·机器学习·计算机视觉·3d
Zfox_2 分钟前
【Linux】进程信号全攻略(二)
linux·运维·c语言·c++
速盾cdn3 分钟前
速盾:vue的cdn是干嘛的?
服务器·前端·网络
安於宿命7 分钟前
【Linux】简易版shell
linux·运维·服务器
丶Darling.10 分钟前
MIT 6.S081 Lab1: Xv6 and Unix utilities翻译
服务器·unix·lab·mit 6.s081·英文翻译中文
黄小耶@19 分钟前
linux常见命令
linux·运维·服务器
叫我龙翔20 分钟前
【计网】实现reactor反应堆模型 --- 框架搭建
linux·运维·网络
古驿幽情22 分钟前
CentOS AppStream 8 手动更新 yum源
linux·运维·centos·yum
BillKu23 分钟前
Linux(CentOS)安装 Nginx
linux·运维·nginx·centos