You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何高效按键的数值范围筛选字典?

按键范围高效筛选字典元素的实现方法

需求描述

我有一个结构如下的字典:

d = {1:'a', 2:'b', 3:'c', 4:'d'}

现在需要筛选出键大于1且小于4的字典元素,预期得到的结果为:

d = {2:'b', 3:'c'}

我目前是靠遍历所有键的for循环实现的这个需求,但这种方式执行耗时偏长,希望找到执行效率更高、符合Pythonic编码规范的实现方案。

最优实现

Python原生提供的字典推导式就是适配这类场景的标准写法,既符合编码规范,运行效率也比手动写显式for循环构建新字典高很多。
具体实现代码如下:

original_d = {1:'a', 2:'b', 3:'c', 4:'d'}
# 筛选规则:键值满足大于1、小于4的条目直接保留
filtered_d = {k: v for k, v in original_d.items() if 1 < k < 4}

运行后得到的filtered_d值就是{2:'b', 3:'c'},完全符合预期结果。

性能说明

字典推导式的效率优势并不是语法糖带来的视觉优化,而是真的有运行时层面的性能提升:

  • 推导式在CPython解释器中直接走C层级的遍历逻辑,没有普通for循环对应的字节码跳转、临时变量赋值的额外开销
  • 相比手动初始化空字典、循环执行new_d[key] = value的写法,推导式减少了字典__setitem__方法的反复调用开销
  • 如果字典的数据量特别大(十万级以上键规模),还可以利用字典keys()视图的集合运算特性进一步优化:
# 超大规模字典场景的优化写法
# 先通过集合交集快速算出所有符合范围的合法键,再构造新字典
valid_key_set = original_d.keys() & set(range(2, 4))
filtered_d = {k: original_d[k] for k in valid_key_set}

提示:Python3.7及以上版本中普通字典默认会保留插入顺序,用上述写法不会打乱原有字典的键排列顺序;如果是Python3.6及以下版本,需要固定顺序的话,可以在遍历合法键的时候补充排序逻辑即可。

内容的提问来源于stack exchange,提问作者Kallol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 16:06:04