3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個贊
通過id使用第一個數(shù)組創(chuàng)建索引的字典。使用循環(huán)遍歷第二個數(shù)組id。
for replacement in b:
v = lookup.get(replacement['id'], None)
if v is not None:
v['score'] = replacement['newscore']
這將O(n^2)問題轉(zhuǎn)化為O(n)問題。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個贊
與其進(jìn)行l(wèi)en(a)* len(b)循環(huán),不如將b加工成更易于使用的東西:
In [48]: replace = {d["id"]: {"score": d["newscore"]} for d in b}
In [49]: new_a = [{**d, **replace.get(d['id'], {})} for d in a]
In [50]: new_a
Out[50]: [{'id': 1, 'score': 500}, {'id': 2, 'score': 600}, {'id': 3, 'score': 400}]
請注意,該{**somedict}語法要求使用現(xiàn)代版本的Python(> = 3.5)。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個贊
清單理解:
[i.update({"score": x["newscore"]}) for x in b for i in a if i['id']==x['id']] print(a)
輸出:
[{'id': 1, 'score': 500}, {'id': 2, 'score': 600}, {'id': 3, 'score': 400}]
定時:
%timeit [i.update({"score": x["newscore"]}) for x in b for i in a if i['id']==x['id']]
輸出:
100000 loops, best of 3: 3.9 μs per loop
添加回答
舉報