[英]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.