Python 列表表示式中正確使用 dict.update

進擊の戴戴發表於2019-08-29

先看這樣一個例子:

ds = [{1: '1'}, {2: '2'}, {3: '3'}]
extra = {0: '0'}
ds = [d.update(extra) for d in ds]
print(ds)
# [None, None, None]

為什麼結果是 None?原因在於 d.update(extra) 是原地更新字典的,返回值為 None,但實際上 d 已經得到了更新,因此我們可以這樣來寫:

ds = [{1: '1'}, {2: '2'}, {3: '3'}]
extra = {0: '0'}
ds = [d.update(extra) or d for d in ds]  
# 由於 d 已經更新且 d.update(extra) 返回為 None,因此 d.update(extra) or d 返回更新後的 d
print(ds)
# [{1: '1', 0: '0'}, {2: '2', 0: '0'}, {3: '3', 0: '0'}]

持續更新日常 debug Python 過程中的小技巧和小知識,歡迎關注!

——————————————
@Joys 感謝提出 bug 及建議!這個需求源於我的一次 debug,如您所說,並非需要賦值操作,如下也是可以的:

ds = [{1: '1'}, {2: '2'}, {3: '3'}]
extra = {0: '0'}
[d.update(extra) or d for d in ds]  
print(ds)

相關文章