簡體   English   中英

Python:我可以修改元組嗎?

[英]Python: can I modify a Tuple?

我有一個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

嗯非常簡單,但我得到一個錯誤,TypeError:'tuple'對象不支持項目分配

謝謝!!

元組不可變,你不能改變它們。

要做的事情可能是找出你為什么要創建元組而不是你期望的列表。

如果prodName是一個元組列表,並且你想創建一個新的元組列表,就像你解釋的那樣,你必須創建新的元組,因為元組是不可變的(即它不能被改變)。

例:

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

簡短的回答:你做不到。

元組是不可變的。 列表是可變的。 這確實是關鍵的區別。

如果你想在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 dict中找不到id則會失敗。 如果你想讓它早早失敗那就太好了。 如果沒有,您可以使用.get()設置默認值(例如: None .get()

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

不幸的是,你無法修改元組。 改用列表。

prodName[i] = tuple(prodName[i][0], value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM