温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行Python字典的消除繁琐的if判断

发布时间:2021-10-09 18:04:24 来源:亿速云 阅读:157 作者:柒染 栏目:大数据

本篇文章为大家展示了如何进行Python字典的消除繁琐的if判断,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

根据不同的条件进行不同的计算或操作,是很常见的需求。Python 有 if 语句可以实现。但是一旦分支很多,多个 if 就是使你眼花缭乱。

我们有许多技巧(套路)来简化这一过程。我会一连几篇文章,从简单到复杂,教你如何理解和应用这些技巧。

动态调用不同的函数

先看数据:

如何进行Python字典的消除繁琐的if判断  
  • 列[计算方式],决定了列[调整]的计算结果

每一种计算方式如下:

如何进行Python字典的消除繁琐的if判断  


看过我之前文章【为什么你总是学不会Python,入门Python的4大陷阱ython,因为你全掉坑了】的小伙伴已经学聪明了,为每一种计算单独定义了函数:

如何进行Python字典的消除繁琐的if判断  

但是,该怎么调用这些函数呢?

"很简单呀,判断,然后调用":

如何进行Python字典的消除繁琐的if判断  
  • 行9:为了防止出现遗漏的计算方式

这看起来不错,但是,每新增一种方式,就要在这里追加一个判断,一旦分支很多,这里的代码就会非常冗长:

如何进行Python字典的消除繁琐的if判断  

为什么我一直让每一块代码尽可能简短?

因为我们每次处理一个独立小问题会比处理大问题要高效得多,大问题意味着涉及很多小问题。同时解决多个小问题,会让我们的大脑短路。


 

单独声明映射关系

如果我们可以这样子定义计算方式与函数的关系,那就很舒服了:

如何进行Python字典的消除繁琐的if判断  

"这看着有点眼熟,不就是字典吗?"

对,字典就是用来表达这种一对一关系的最佳结构。

你可以把字典当作是一个过目不忘(死记硬背)的记忆高手,只要他过一遍数据之后,你给他一个 key 值,他能马上找出对应的 value 值给你。

于是,我们可以把计算方式与定义的每个函数给他记忆:

如何进行Python字典的消除繁琐的if判断  

接下来,真正处理每一行数据的时候,只需要让他(字典)取出函数,然后调用即可:

如何进行Python字典的消除繁琐的if判断  
  • 行2-4:特别要注意,字典的 value 我们只是给了函数名字,千万别在后面加括号,括号是表示执行函数。现在我们不需要执行函数呢

  • 调用的时候,别忘记给函数传入需要计算的指标

  • 不仅代码简单了,如果你有留意左下角的运行时间,你会发现这种方式比之前的方式提速了

现在我们的代码挺不错,如果数据中出现了新的计算方式,但我们忘记加入字典,那么代码运行就会报错:

如何进行Python字典的消除繁琐的if判断  
  • 行4:注释掉,相当于我们忘记定义计算方式C

  • 可以看到错误信息,能让我们马上联想到原因

"一举两得,太完美了!"

但是,如果你跟我学习 pandas ,就会知道,pandas 中尽可能避免自己遍历处理数据。

pandas 的简洁程度与计算效率不是我们自己遍历处理可以比得过。


 

pandas 处理方式真的就完美?

这个例子中,每一种的计算方式的区别仅仅在于后面的系数:

如何进行Python字典的消除繁琐的if判断  

这种情况下,其实我们可以先批量把每一行对应的系数取出来,然后直接计算:

如何进行Python字典的消除繁琐的if判断  
  • 注意执行时间,又提速了

别以为这只是 pandas 把 for 遍历给你写了而已,他是基于 numpy 的,而numpy处理时都是基于 c++ 的调用,性能非常快速

这种方式其实也有他的缺点:

  1. Series.map 方法的确做了字典取值做的事情,但是在他找不到key时,是不会报错的。我们需要后续通过判断 nan 来检查

  2. 有时候计算逻辑没有这么简单,比如需要看销量是否超过同地区的平均值做出不同的计算分支。这时候使用 pandas 的方式就会感觉逻辑被分散(下一节我们来看看这种情况下的处理)

"那么,之前的字典声明方式,是不是就是这种场景下最通用的方式?"


 

思考题

用字典声明对应关系其实已经非常好了,但是如果能在定义函数的地方上直接标记对应关系,那么也挺好:

如何进行Python字典的消除繁琐的if判断  
  • 不再需要定义字典关系了

怎么可以做到这种效果呢?有兴趣的小伙伴不妨试试。

上述内容就是如何进行Python字典的消除繁琐的if判断,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI