給定一個輸入元組,目標是生成一個帶有一些預定義鍵的字典,例如,在這種情況下,我們有一個add_headerlambda,并在呼叫函式時使用內部解包。
>>> z = (2,1)
>>> add_header = lambda x, y: {"EVEN": x, "ODD": y}
>>> add_header(*z)
{'EVEN': 2, 'ODD': 1}
我的問題是,有沒有在呼叫函式時不需要解包的add_header方法?
例如,我可以更改避免使用 lambda 并在正常功能中執行此操作:
>>> def add_header(input):
... x, y = input
... return {"EVEN": x, "ODD":y}
...
>>> z = (2, 1)
>>> add_header(z)
{'EVEN': 2, 'ODD': 1}
或者我不能使用解包并使用元組的索引,即z[0]and z[1]:
>>> z = (2, 1)
>>> add_header = lambda z: {"EVEN": z[0], "ODD": z[1]}
>>> add_header(z)
{'EVEN': 2, 'ODD': 1}
但是有沒有辦法:
- 使用 lambda
- 不要在元組中顯式使用索引
*呼叫函式時不要解包,add_header()但是在 lambda 函式內部是可以的。
并且仍然在{'EVEN': 2, 'ODD': 1}給定輸入的情況下實作相同的輸出z = (2,1)?
我知道這行不通,但是這樣的事情存在嗎?
z = (2,1)
add_header = lambda x, y from *x: {"EVEN": x, "ODD": y}
add_header(z)
uj5u.com熱心網友回復:
您可以嘗試使用dict()with zip():
z = (2, 1)
add_header = lambda tpl: dict(zip(("EVEN", "ODD"), tpl))
print(add_header(z))
印刷:
{'EVEN': 2, 'ODD': 1}
uj5u.com熱心網友回復:
首先不要使用命名的 lambda。改為使用def。
PS 我認為有一個論點是 lambdas 是故意弱的,以避免將它們硬塞到不應該出現的情況中,就像這種情況一樣,但我沒有對此的參考,也沒有強有力的論據來解釋為什么要特別拆包在他們里面應該是不可能的。我愿意接受建議。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523031.html
下一篇:資料框中的字典值
