4 回答

TA貢獻1816條經驗 獲得超6個贊
您需要創(chuàng)建一個新的元組“詳細信息”列表。在 Python 中,您通常無法“就地”更改列表。如果您只是在 for 循環(huán)中創(chuàng)建一個新的“詳細信息”,它將不會傳遞到“詳細信息”列表。
因此,您需要用for detail in details:
以下行替換完整的循環(huán):
updated_details = [(user, VoteChoice, Comments, User.query.filter_by(name=user).first().fb_pic) for (user, VoteChoice, Comments) in details]
最后,您將這些更新的詳細信息用于返回的 render_template:
return render_template(..., vote_details=updated_details)

TA貢獻1995條經驗 獲得超2個贊
元組是不可變的,因此您不能直接修改它們。
在您的 for 循環(huán)中,從原始detail元組中創(chuàng)建一個列表,并將附加值附加到該列表中。然后,您可以將列表轉換回元組:
detail_list = list(detail)
detail_list += [maybe_existing_user.fb_pic]
detail = tuple(detail_list)

TA貢獻1799條經驗 獲得超6個贊
使用 splat 操作符在一行中重新打包
detail_list = *detail_list, maybe_existing_user.fb_pic
例如,在 python3 shell 中:
>>> detail_list = ("cat", "dog")
>>> detail_list = *detail_list, "rabbit"
>>> detail_list
('cat', 'dog', 'rabbit')
>>>

TA貢獻1812條經驗 獲得超5個贊
您已經正確添加到元組中。問題是detail += ...創(chuàng)建一個新元組而不是附加到details列表中的現(xiàn)有元組(因為元組是不可變的)。當您print(detail)在循環(huán)中時,它似乎已正確更改,但如果您要打印整個列表details,您會看到其中的元組沒有附加信息。
一種解決方案是使用新元組重建詳細信息列表。
def add_more_info(t):
maybe_existing_user = User.query.filter_by(name=detail[0]).first()
return t + (maybe_existing_user, )
details = [add_more_info(detail) for detail in details]
另一種解決方案是首先將所有詳細信息轉換為列表。然后你可以附加到它們。
details = [list(detail) for detail in details]
for detail in details:
maybe_existing_user = User.query.filter_by(name=detail[0]).first()
detail.append(maybe_existing_user)
添加回答
舉報