如何在不获取TypeError的情况下更改具有多个值(元组)的字典的特定值

时间:2018-11-29 13:16:10

标签: python dictionary set tuples

我有一个下面的函数,该函数使用输入的函数参数搜索字典键匹配。如果找到键匹配项,我希望索引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

我知道这一定是因为元组不是可变的,但是由于我正在使用字典,因此必须有一种使这项工作有效的方法,有人可以在这里伸出援手吗?

谢谢!

4 个答案:

答案 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添加到您想要的位置,并且仍然是元组。