猿问

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

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 ] 我该怎么做?


手掌心
浏览 225回答 2
2回答

元芳怎么了

这是字典的一个很好的用例!首先,定义一个将颜色名称映射到数字的字典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().

紫衣仙女

y=[1 if (t['color']=='yellow') else 2 if (t['color']=='blue') else 3 for t in item]
随时随地看视频慕课网APP

相关分类

Python
我要回答