我在下面列出了dicts:
categories=[
{'id':0,'value':8,'name':'Banking'},
{'id':1,'value':5,'name':'Home'},
{'id':2,'value':2,'name':'Travel'},
{'id':3,'value':4,'name':'Movies'},
{'id':4,'value':7,'name':'Hiking'},
{'id':5,'value':9,'name':'Food'},]
我试图浏览上面列表中的所有值并按以下方式更新它们:
for cat in categories:
if(cat['value']==2):
cat['value']=1
if(cat['value']==3):
cat['value']=4
if(cat['value']==4):
cat['value']=8
if(cat['value']==5):
cat['value']=12
if(cat['value']==8):
cat['value']=40
......
(from 2 till 10 in if condition)
这种方法的问题在于,
例如,名称Banking的cat['value']
为8
所以如果条件将值设置为40。
以及稍后的循环中,电影的cat['value']
从4开始变为8,后来更新为40 ..(现在它搞砸了cat['values']
)
因此,这种更新方法肯定是不正确的。
如何根据这些多个条件更新列表中的cat['values']
?
如果需要,可以将if条件框架为另一个列表
[{2:1},{3:4},{4:8},{5:12},....]
请您帮我解决一下我如何根据上述条件更新cat['values']
的方法?
答案 0 :(得分:3)
只需使用elif
一次更新值(official doc on control-flows)
for cat in categories:
if cat['value'] == 2:
cat['value'] = 1
elif cat['value'] == 3:
cat['value'] = 4
elif cat['value'] == 4:
cat['value'] = 8
elif cat['value'] == 5:
cat['value'] = 12
elif cat['value'] == 8:
cat['value'] = 40
PS:你不需要python中if
周围的()
答案 1 :(得分:3)
您还可以将转换写入dict,然后通过旧值访问dict并使用dict的值覆盖。
conversions ={2:1,3:4,4:8,..}
for cat in categories:
cat['values']=conversions[cat['values']]
答案 2 :(得分:1)
只需使用elif
进行第二次及以后的比较:
if cat['value'] == 2:
cat['value'] = 1
elif cat['value'] == 3:
cat['value'] = 4
...
或者,您可以使用字典重新映射值:
values = {2: 1, 3: 4, 4: 8, 5: 12, 8: 40}
cat["value"] = values[cat["value"]]
答案 3 :(得分:1)
而不是一系列if
语句,将其设为一个elif
链。
for cat in categories:
if(cat['value']==2):
cat['value']=1
elif(cat['value']==3):
cat['value']=4
elif(cat['value']==4):
cat['value']=8
elif(cat['value']==5):
cat['value']=12
elif(cat['value']==8):
cat['value']=40
(或者,您可以在找到值后使用continue
语句转到下一个类别。)