Python:我可以修改元组吗?

Moh*_*hit 4 python tuples list immutability

我有一个2D元组(实际上我认为,它是一个列表......但是错误说它是一个元组)但是反正..元组的形式是:(floatnumber_val,prod_id)现在我有一个包含key->的字典prod_id和值prod_name现在..我想将元组中的prod_id更改为prod_name所以这是我做的

#if prodName is the tuple
# prodDict is the dictionary
for i in range(len(prodName)):
    key = prodName[i][1] # get the prodid
    if prodDict.has_key(key):
        value = prodDict[key]
         prodName[i][1] = value
Run Code Online (Sandbox Code Playgroud)

嗯非常简单,但我得到一个错误,TypeError:'tuple'对象不支持项目分配

谢谢!!

car*_*ett 9

元组不可变,你不能改变它们.

要做的事情可能是找出你为什么要创建元组而不是你期望的列表.


Ulf*_*lfR 6

如果prodName是一个元组列表,并且你想创建一个新的元组列表,就像你解释的那样,你必须创建新的元组,因为元组是不可变的(即它不能被改变).

例:

for i,(floatnumber_val, prod_id) in enumerate(prodName):
  prodName[i] = (floatnumber_val, prodDict.get(prod_id,prod_id))
Run Code Online (Sandbox Code Playgroud)


Fin*_*inn 5

简短的回答:你做不到.

元组是不可变的.列表是可变的.这确实是关键的区别.

如果你想在Python中改变一个有序的项集合,它必须是一个列表.如果你想坚持元组,你将不得不重新制作元组.如果我理解你正确你开始:

prodName = [(1.0, 1), (1.1, 2), (1.2, 3)]
prodDict = {1: 'name_1', 2: 'name_2', 3: 'name_3'}
Run Code Online (Sandbox Code Playgroud)

因此,您可以获得所需的列表:

new_prodName = [(f, prodDict[id]) for f, id in prodName)]
Run Code Online (Sandbox Code Playgroud)

如果idprodDictdict中找不到,这将失败.如果你想让它早早失败那就太好了.如果没有,你可以设置一个默认的(如None使用).get():

new_prodName = [(f, prodDict.get(id, None)) for f, id in prodName)]
Run Code Online (Sandbox Code Playgroud)