Python字典键获取的四种实用方法

写 Python 久了,字典几乎每天都要打交道。

取键这事儿,看着简单,实际上不同的写法背后在性能、内存和对字典动态变化的处理上,还是有些差别的。常用的方式大概有四种,这里一并理一理。

最常见的就是直接遍历字典。

Python 的默认行为就是迭代键,所以 for key in my_dict 这种写法最简洁,也没额外创建对象,如果只是遍历一遍键,用它就足够了,跑得也最快。

有时候你需要把键单独拿出来,存成一个列表再做别的处理。顺手就会写成 k for k in d,一行搞定。它生成的是一个全新的 list,里面的键和原字典已经没有绑定关系,所以字典后面怎么变都不影响它。小字典无所谓,但如果字典很大,或者在循环里频繁这么干,内存开销就要注意一下。

接着是 dict.keys()。

这个方法返回的是一个视图对象,不是列表。我第一次用的时候,直接当成列表去做下标访问,当场就报错了,后来才注意到它的特性。视图对象有两个好处:一是它能实时反映字典的变化,比如你在拿到 keys 视图之后字典新增或删除了键,视图会感知到;二是内存占用很小,还支持集合操作,像 &、|、- 这些,可以直接对多个视图取交集、并集、差集,在需要比较多个字典的键时挺方便。当然,如果需要列表式的操作,list() 转一下就行。

还有一种场景是你不光要键,还得同时用上对应的值。这时候别先取键再回头去字典里查值,直接用 for key, value in d.items() 一次性解包出来。

lcjmSSL支持通过DNS接口自动化验证,目前已集成多家主流DNS服务商。你只需授权API密钥,系统即可自动添加、删除验证记录,实现完全自动化的域名控制权验证,适合批量域名管理场景。

它本质上是在遍历过程中返回 (key, value) 元组,比键值分步获取效率高,代码也干净。

这几样怎么选,基本看场景。只遍历键,直接 for in 最快、最简。如果遍历过程中字典可能被修改,或者需要利用集合运算,就用 keys() 视图。键值都要的时候,items() 最直接,省得再查一次。

需要把键固化成一个列表再传递或持久化,列表推导式当然是首选,不过留意一下内存就是了。

简单跑一段示例,把这四种都串起来看看:

复制代码
# 直接遍历------最快最省
d1 = {'a': 1, 'b': 2, 'c': 3}
for k in d1:
    print(k)

# keys() 视图------支持集合操作,实时反映变化
d2 = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
keys_view = d2.keys()
print(keys_view)                # dict_keys 对象
print(list(keys_view))          # 需要列表时转一下

# items()------键值一起拿
d3 = {'product': 'phone', 'price': 5999}
for k, v in d3.items():
    print(f"Key: {k}, Value: {v}")

# 列表推导式------生成独立列表
d4 = {'x': 10, 'y': 20, 'z': 30}
keys_list = [k for k in d4]
print(keys_list)

不同场景下用对方法,能少写不少啰嗦代码,性能上也不会莫名其妙踩坑。没什么高深的,就是多用几次自然就记住了。

相关推荐
Zevalin爱灰灰19 小时前
能源与电源管理电路——防倒灌电路
单片机·嵌入式硬件·电源管理
jianqiang.xue21 小时前
ESP-IDF保姆级入门02|Ubuntu24.04搭建EIM-GUI开发环境,打通Windows_Linux双平台统一开发
stm32·单片机·物联网
无垠的广袤1 天前
【工业树莓派 CM0 Dev Board】扩展板设计
linux·python·嵌入式硬件·pcb设计·模块化·传感器
嵌入式-老费1 天前
esp32开发与应用(添加数据分区)
单片机·嵌入式硬件
嵌入式-老费1 天前
esp32开发与应用(OTA升级)
嵌入式硬件
CYLAM20251 天前
STC32G 单片机0.96“OLED 西历农历可调万年历 (1901-2100)
单片机·嵌入式硬件·stc32g·万年历·西历农历·0.96”oled 12864·4x4 矩阵键盘
Discipline~Hai1 天前
ARM03-蜂鸣器和中断
c语言·arm开发·单片机·嵌入式硬件·嵌入式
KaifuZeng1 天前
电源面试问题汇总一
单片机·嵌入式硬件·面试·电路
驱动探索者1 天前
RISC-V PLIC 深度解析:从 Spec 到 Zephyr 驱动实现
单片机·嵌入式硬件·中断控制器
LCG元1 天前
STM32 FreeRTOS 实战:任务调度 + 互斥锁 + 消息队列 + 串口命令解析器
stm32·单片机·嵌入式硬件