我有一個N字典列表,以及一個N字符串列表。對于前者的每個字典,我想用后者的相應字符串附加/更新一個鍵值對。例如:names = [{'First':'John','Last':'Doe'} , {'First':'Jane','Last':'Doe'}]ages = ['21','32']以下循環有效:for i,j in zip(names,ages): i.update({'Age':j}) print(i)部分是為了智力挑戰,但部分是為了適應最終的并行處理,我想在沒有循環的情況下解決同樣的問題。我的兩次嘗試都沒有成功;都返回了None類型的列表:第一次嘗試:f = lambda x: x[0].update({'Age':x[1]})out = map(f,zip(names,ages))for i in out: print(i)第二次嘗試:out = (i.update({'Age':j}) for i,j in zip(names,ages))for i in out: print(i)是什么賦予了?
1 回答

動漫人物
TA貢獻1815條經驗 獲得超10個贊
使用 dict unpacking operator **,應該可以返回一個合并的 dict 作為 map 的結果,而根本不修改原始的。
f = lambda x: {**x[0], 'Age': x[1]}
out = map(f,zip(names,ages))
print(list(out))
# [{'First': 'John', 'Last': 'Doe', 'Age': '21'},
# {'First': 'Jane', 'Last': 'Doe', 'Age': '32'}]
這是一個不太常見的習慣用法,您可以使用它來動態合并字典。當它在幾個月后發布時,Python 3.9 將為|運算符添加一個重載,這將允許您做一些類似的事情x[0] | {'Age': x[1]}來更清楚地獲得相同的結果,但現在這應該符合您的目的。
這應該使解決方案更容易并行化,但請記住循環for可以很好地用于并行化,只要每個元素都獨立于其他元素 - 您可以將列表分成塊并將一個塊交給每個并行進程. 與您已經使用的方法相比,這種方法的唯一好處是各種并行進程將不再寫入內存中的相同數據結構。
- 1 回答
- 0 關注
- 151 瀏覽
添加回答
舉報
0/150
提交
取消