我有一个下面的函数,该函数使用输入的函数参数搜索字典键匹配。如果找到键匹配项,我希望索引1(团队)的值更改为调用该函数时输入的所需团队:
dict1 = {'Messi' : ('Argentina','Barcelona'), 'Ronaldo' : ('Portugal','Juventus'), 'Robben': ('Netherlands','Bayern')}
def setNewTeam(plyr, newTeam):
for x in dict1:
if plyr == x:
dict1[plyr][1] = newTeam
setNewTeam('Messi', 'Manchester')
但是,当我运行此代码时,我得到:
TypeError: 'tuple' object does not support item assignment
我知道这一定是因为元组不是可变的,但是由于我正在使用字典,因此必须有一种使这项工作有效的方法,有人可以在这里伸出援手吗?
谢谢!
答案 0 :(得分:1)
dict1 = {'Messi' : ('Argentina','Barcelona'), 'Ronaldo' : ('Portugal','Juventus'), 'Robben': ('Netherlands','Bayern')}
def setNewTeam(plyr, newTeam):
for x in dict1:
if plyr == x:
dict1[plyr] = (dict1[plyr][0], newTeam)
setNewTeam('Messi', 'Manchester')
答案 1 :(得分:1)
如错误消息所述,您不能将新项目分配给元组,因为元组是python中的不可变对象。
my_tup = (1,2,3)
my_tup[0] = 2 # TypeError
您可以使用列表代替:
dict1 = {'Messi' : ['Argentina','Barcelona'], 'Ronaldo' : ['Portugal','Juventus'], 'Robben': ['Netherlands','Bayern']}
def setNewTeam(plyr, newTeam):
for x in dict1:
if plyr == x:
dict1[plyr][1] = newTeam
setNewTeam('Messi', 'Manchester')
请注意,当元组使用[]
时,如何使用()
创建列表。
答案 2 :(得分:0)
由于要更新值,因此元组不是良好的数据结构。您应该使用列表。
如果仍然要使用元组,则可以使用以下命令构建一个全新的元组:
dict1[plyr] = (dict1[plyr][0], newTeam)
答案 3 :(得分:0)
dict1[plyr][1] = newTeam
组是不可变的,但列表不是。您可以执行以下操作:
list1 = list(dict1[plyr])
list1[1] = newTeam
dict1[plyr] = tuple(list1)
它将newTeam
添加到您想要的位置,并且仍然是元组。