python如何遍历字典:按需遍历键、值、键值对的实操方法

python如何遍历字典:按需遍历键、值、键值对的实操方法

刚学Python写脚本处理本地数据的时候,卡最久的问题就是python如何遍历字典,当时只会死板写循环,跑代码要么只拿到一堆看不懂的对象,要么重复输出数据,折腾了半天才摸透字典遍历的真实逻辑。

最开始写代码,直接用for循环裸遍历字典,完全没搞懂字典的遍历规则。写了一段循环代码,跑完之后发现控制台只输出了所有的键,我当时需要同时提取键和对应的值用来匹配数据,结果程序直接报错,缺失关键参数。那时候误以为直接循环字典,就能一次性拿到所有数据,压根不知道字典的默认遍历对象只有键。

为了省事,当时硬写了冗余代码,先遍历取出所有键,再通过键去索引对应的值。代码行数多了一倍,运行速度还慢,处理稍微大一点的字典数据时,页面加载明显卡顿。这种笨办法虽然能跑出结果,但代码臃肿,可读性极差,后续修改的时候自己都看不懂当初的逻辑。

后来偶然试了字典的values方法,才跳出之前的思维误区。调用dict.values()之后,循环可以直接获取字典里的所有值,不用再通过键二次查找。那段时间批量筛选字典里的数值数据,都是用这个方法,不用多余的嵌套步骤,代码瞬间简洁了很多,专门适配只需要取值、不需要键的场景。

真正适配绝大多数工作场景的,是items方法,也是我现在写代码最常用的遍历方式。dict.items()可以一次性迭代出键和值两个参数,不用拆分步骤,一行循环就能完成双向取值。之前做数据整理,需要同步匹配字段名和对应内容,用这个方法一次性遍历完成,彻底解决了之前代码冗余、运行卡顿的问题。

很多人都会忽略一个细节,遍历字典的时候不能直接修改原字典长度。之前遍历过程中,随手写了删除键值对的代码,运行之后直接抛出迭代异常,程序直接崩溃。反复测试后才发现,遍历过程中字典元素数量发生改变,会打乱迭代索引,导致程序无法正常运行。

遇到需要边遍历边删减数据的场景,现在的固定做法是,先把字典的键或者键值对转成列表,再遍历列表操作原字典。这样迭代的对象是固定的列表数据,原字典的修改不会影响循环逻辑,程序就能稳定运行,不会出现报错闪退的情况。

不同的遍历方式适配的场景完全不一样,没有万能的写法。只需要筛选字段名称,就直接裸循环字典;只需要统计、筛选数值,就用values方法;需要键值配对处理数据,就固定用items方法。

最近整理旧项目代码,正在批量替换之前冗余的遍历写法,把所有二次索引取值的代码全部改成items直接遍历,统一代码书写格式。

了解更多百科知识请访问 百科