在Python switch case中执行数学运算等效

问题描述 投票:0回答:2

我试图用Python等效的Python简化Python中的if-elif-else块。但我在切换案例字典中尝试执行数学运算时遇到问题

我在通过pandas数据帧运行的FOR循环中执行此代码。基本上根据条件做一些数学。

示例数据帧:

10889  103.579   89.160  2.98   2.1154     NaN   in 0.48  0.20   15.0
10890  103.859   89.133  2.98   2.1266     NaN   out 0.48  0.20   15.0
10891  104.067   89.133  2.98   2.1349     NaN   out 0.48  0.20   15.0
10892  106.867   91.933  2.98    2.293     NaN   out 0.48  0.20   15.0
10893  106.867   91.859  2.98   2.2959     NaN   sol 0.48  0.20   15.0
10894  106.840   91.579  2.98   2.3072     NaN   sol 0.48  0.20   15.0
10895  106.785   91.302  2.98   2.3184     NaN   sol 0.48  0.20   15.0
10896  106.728   91.115  2.98   2.3263     NaN   text 0.48  0.20   15.0
10897  104.885   89.272  2.98   2.4303     NaN   text 0.48  0.20   15.0
10898  104.885   89.272  2.98        0     NaN   mid 0.48  0.20   15.0

当前的代码:

       if self.newdataframe.iloc[i]['FT'] in ('in', 'out'):
            self.ext_out += edis
       elif self.newdataframe.iloc[i]['FT'] == 'sol':
            self.ext_sol += edis
       elif self.newdataframe.iloc[i]['FT'] == 'mid':
            self.ext_mid += edis
       elif self.newdataframe.iloc[i]['FT'] == 'text':
            self.ext_text += edis
       else:
            self.ext_other += edis

把它转换成一个开关盒..这是我的尝试。代码看起来像这样,但显然是抛出错误

newdict = { 'in': self.ext_out += edis,
'out': self.ext_out += edis,
'sol': self.ext_sol += edis,
'mid': self.ext_mid += edis,
'text': self.ext_text += edis}

newdict[self.newdataframe.iloc[i]['FT']]

我尝试使用Lambda函数,但这似乎导致自我问题。变量。任何指针或指导,示例都非常感谢

python dataframe switch-statement first-class-functions
2个回答
2
投票

如果self.ext是一个带有密钥outsol等的字典,而不是每个字母的单独属性,那可能会更好。原样,你可以使用setattr与适当的dict

d = {x: x for x in ['out', 'mid', 'sol', 'text']}
d['in'] = 'out'
x = 'ext_' + d.get(self.newdataframe.iloc[i]['FT'], 'other')
setattr(self, x, getattr(self, x) + edis)

更好的方法:

self.ext[d.get(self.newdataframe.iloc[i]['FT'], 'other')] += edis

0
投票

你称之为“等效的switch case”被称为字典。字典是键值对的数据结构。字典不会以与if ... else链相同的方式执行代码。您只能在字典中存储值。这些值可能是函数,因为python中的函数是一等公民。但这并不适合在python中使用简单的解决方案。最初的if ... else链是完全可以接受的。

© www.soinside.com 2019 - 2024. All rights reserved.