为了账号安全,请及时绑定邮箱和手机立即绑定

具有列表推导式的单行 if-elif-else

具有列表推导式的单行 if-elif-else

手掌心 2023-11-09 21:39:48
item是来自 MySQL 的所有元组y=[1 if (t['color']=='yellow') else -1 for t in item]输出:[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  -1 -1 -1 -1 -1 -1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 ]像这个,我想做这个for t in item:   if(t['color']=='yellow'):       y=1   elif(t['color']=='blue'):       y=2   else:       y=3并将结果放入数组中y=[1 if (t['color']=='yellow') 2 elif (t['color']=='blue') else 3 for t in item]y=np.array(y)print(y)输出应该是这样的[ 1 2 3 1 3 2 1 3 1 2 3 2 1 ] 我该怎么做?
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

这是字典的一个很好的用例!

首先,定义一个将颜色名称映射到数字的字典

colordict = {'yellow': 1, 'blue': 2, 'default': 3}

然后,使用colordict.get()检索正确的号码

y = [colordict.get(t['color'], colordict['default']) for t in item]

第二个参数是如果在 中找不到.get()则返回的默认值。t['color']colordict

使用字典可以轻松添加更多颜色。您能想象必须编写一百个嵌套if-elses来支持一百种颜色吗?!

使用这个虚拟列表进行测试:

item = [
    {'color': 'yellow', 'data': 0.5},
    {'color': 'purple', 'data': 0.1}, 
    {'color': 'blue', 'data': 0.2}, 
    {'color': 'blue', 'data': 0.3}, 
    {'color': 'red', 'data': 0.6}
       ]

我们得到输出

[1, 3, 2, 2, 3]

这正是我们所期望的。

如果您defaultdict不想处理.get().


查看完整回答
反对 回复 2023-11-09
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

y=[1 if (t['color']=='yellow') else 2 if (t['color']=='blue') else 3 for t in item]



查看完整回答
反对 回复 2023-11-09
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信