繁体   English   中英

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

[英]Single-line if-elif-else with list comprehensions

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

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

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

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

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

然后,使用colordict.get()检索正确的数字

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

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

使用 dict 使得添加更多颜色变得微不足道。 你能想象必须编写一百个嵌套的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]

这正是我们所期望的。

如果您不想处理.get()也可以使用defaultdict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM