先看這樣一個例子:
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)