簡體   English   中英

map(lambda,list) 返回 None 而不是對象

[英]map(lambda,list) return None instead object

我想為列表中的所有對象(即 django 中的模型實例)添加屬性。 例如列表是:

persons = [
        {"age":"12","name":"John"},
        {"age":"10","name":"Joye"}
]

我們假設,我想認沽值person.ageperson.number和我有一個新的列表,所有的人都有新的屬性number ,所以我的函數為:

new_persons_list=list(map(lambda person:setattr(person, 'number', person.age), persons))

但輸出是[None,None]而我希望輸出是:

persons = [
        {"age":12,"name":"John","number":12},
        {"age":10,"name":"Joye","number":10}
]

如果可能的話,我不喜歡在map添加新函數,我想使用 lambda。有什么問題?謝謝

這不是那么容易,所以使用:

new_persons_list=list(map(lambda person:{**person.to_dict(), "number": person.age}, persons))

注意:使用上面的示例代碼,它會引發AttributeError ,因為字典沒有.age屬性。 我假設您使用 Django 對象,如果您定義了一個字段,它確實具有屬性。

setattr(..)函數更新一個對象。 大多數更新某些內容的函數不會返回某些內容(這本身並不正確,但對於許多函數來說,這是成立的)。

所以你的列表只是獲取setattr調用的結果。 我們可以通過以下方式規避這個問題:

new_persons_list=list(map(lambda person: setattr(person, 'number', person.age) or person, persons))

但更有意義的是,您只需在此處使用for循環來更新對象:

for person in persons:
    person.number = person.age

暫無
暫無

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

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