Python 大量的 if statements,有没有漂亮简洁的写法?

2018-03-19 16:01:11 +08:00
 youthfire

主要用途是对渐入的关键字进行“修正”,以完全匹配目标表内的查询字符。

目前是这种写法

if keystring == 'sun': keystring = 'Sun Ltd.,' if keystring == 'run': keystring = 'Running well Ltd.,' if keystring == 'fit': keystring = 'nice fitting Ltd.,'

这样简单的替换可能有几十个,长长一串特别难看。最终替换成的目标又不是一样的,也没法用函数。

求教有没有什么好看一些的写法?不用写个几十行?

5010 次点击
所在节点    Python
19 条回复
liprais
2018-03-19 16:05:07 +08:00
打表呗
rrfeng
2018-03-19 16:05:52 +08:00
写个 dict 存起来。
lhx2008
2018-03-19 16:06:40 +08:00
建个 map,从 map 里面取值
IanPeverell
2018-03-19 16:15:08 +08:00
那就用 switch 啊
Zzde
2018-03-19 16:19:40 +08:00
封装成方法 用 getattr 调
araraloren
2018-03-19 16:20:12 +08:00
@IanPeverell python not have switch
lfzyx
2018-03-19 16:21:46 +08:00
你把正确的都放在一个 list 里面,['Sun Ltd', 'Running well Ltd' , 'nice fitting Ltd ']

然后把用户输入的去匹配列表中的,取出来,不就行了
wbgbg
2018-03-19 16:24:20 +08:00
表驱动了解一下
snailsir
2018-03-19 16:51:12 +08:00
代码大全,表驱动法
wodexiaogou
2018-03-19 17:02:23 +08:00
写个字典{'sun':'Sun Ltd'}这种,for i in dict:keystring=dict[i]
jyf
2018-03-19 17:07:24 +08:00
表驱动

```python
replaces = {'sun': 'sun ltd', 'oracle': 'oracle ltd', }
for k in keys:
v = replaces.get(k, '')
```

不过看你这个需求有点像关键词屏蔽 :D 这种其实你用正则把许多关键词用|连起来也可以的
ToughGuy
2018-03-19 17:07:58 +08:00
corps = {'sun': 'Sun Ltd.,'}
keystring = corps.get(keystring, default='Other')


这和 python 也没太大关系, 你需要的是一个 dict(map)
beforeuwait
2018-03-19 17:09:08 +08:00
一楼说得对
youthfire
2018-03-19 17:22:04 +08:00
感谢各位!

之前只知道 list 和 dic,但并不清楚 dict(map),表驱动这回事。只觉得尽管可以用来判断是否在一个 pool 内,但缺乏映射关系的表达。可能也是没有系统的学习有关。已经达成。谢谢!
IanPeverell
2018-03-19 17:33:14 +08:00
@araraloren 最近 node 写多了,忘了 python 没有了(捂脸跑)
okzpy9425
2018-03-19 22:07:01 +08:00
hashmap
ivydom
2018-03-19 22:13:52 +08:00
用字典
liuyin
2018-03-20 09:23:11 +08:00
dict 这个主意不错
Ge4Los
2018-03-20 18:25:45 +08:00
表驱动了解下。
咦,有人讲过了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX