我可以使用变量引用namedtuple字段名吗?
from collections import namedtuple
import random
Prize = namedtuple("Prize", ["left", "right"])
this_prize = Prize("FirstPrize", "SecondPrize")
if random.random() > .5:
choice = "left"
else:
choice = "right"
#retrieve the value of "left" or "right" depending on the choice
print "You won", getattr(this_prize,choice)
#replace the value of "left" or "right" depending on the choice
this_prize._replace(choice = "Yay") #this doesn't work
print this_prize
元组是不可变的,NamedTuples也是不可变的。他们不应该被改变!
this_prize._replace(choice = "Yay")
使用关键字参数"choice"
调用_replace
。它不使用choice
作为变量,并尝试用choice
名称替换字段。this_prize._replace(**{choice : "Yay"} )
将使用任何choice
作为字段名_replace
返回一个新的NamedTuple。你需要重新签名:this_prize = this_prize._replace(**{choice : "Yay"} )
只需使用dict或编写一个普通类!
相关问题 更多 >
编程相关推荐