Python:使用namedtuple。用变量替换为fieldnam

2024-09-30 22:15:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以使用变量引用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

Tags: oroftheimportrightvalueonrandom
2条回答

元组是不可变的,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或编写一个普通类!

>>> choice = 'left'
>>> this_prize._replace(**{choice: 'Yay'})         # you need to assign this to this_prize if you want
Prize(left='Yay', right='SecondPrize')
>>> this_prize
Prize(left='FirstPrize', right='SecondPrize')         # doesn't modify this_prize in place

相关问题 更多 >