【问题标题】:Python: can I modify a Tuple?Python:我可以修改元组吗?
【发布时间】:2011-11-13 07:01:52
【问题描述】:

我有一个 2D 元组(实际上我以为它是一个列表.. 但错误说它是一个元组) 但无论如何.. 元组的形式为: (floatnumber_val, prod_id) 现在我有一个字典,其中包含 key-> prod_id 和 value 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

嗯,很简单 但我收到一个错误,TypeError: 'tuple' object does not support item assignment

谢谢!!

【问题讨论】:

标签: python list tuples immutability


【解决方案1】:

元组不是可变的,你不能改变它们。

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

【讨论】:

    【解决方案2】:

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

    例子:

    for i,(floatnumber_val, prod_id) in enumerate(prodName):
      prodName[i] = (floatnumber_val, prodDict.get(prod_id,prod_id))
    

    【讨论】:

      【解决方案3】:

      简短的回答:你不能。

      元组是不可变的。列表是可变的。这才是真正的关键区别。

      如果你想在 Python 中改变一个有序的项目集合,它必须是一个列表。如果你想坚持使用元组,你将不得不创建一个新的。如果我对您的理解正确,您将从:

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

      所以,你可以得到你想要的列表:

      new_prodName = [(f, prodDict[id]) for f, id in prodName)]
      

      如果在prodDict 字典中找不到id,这将失败。如果您希望它尽早失败,那就太好了。如果没有,您可以使用.get() 设置默认值(例如:None):

      new_prodName = [(f, prodDict.get(id, None)) for f, id in prodName)]
      

      【讨论】:

        【解决方案4】:

        很遗憾,您无法修改元组。请改用列表。

        【讨论】:

          【解决方案5】:
          prodName[i] = tuple(prodName[i][0], value)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-02
            • 2020-10-16
            • 2013-02-20
            • 2019-01-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多