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'对象不支持项目分配
谢谢!!
如果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)
简短的回答:你做不到.
元组是不可变的.列表是可变的.这确实是关键的区别.
如果你想在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)
如果id
在prodDict
dict中找不到,这将失败.如果你想让它早早失败那就太好了.如果没有,你可以设置一个默认的(如None
使用).get()
:
new_prodName = [(f, prodDict.get(id, None)) for f, id in prodName)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25615 次 |
最近记录: |