如果一个字典列表具有相同的特定值,则用另一个字典列表的值更新它们

时间:2018-07-11 15:54:08

标签: python list pandas dictionary

例如,我们有2个词典列表

10

如果它们具有相同的fruit_id,我想用列表B更新列表A,因此对于此示例,列表A的颜色值将更改为绿色。有什么好的算法?

2 个答案:

答案 0 :(得分:0)

a = [{'fruit_id':234, 'type':'apple', 'color':'red'}]
b = [{'fruit_id':235, 'type':'kiwi', 'color':'brown'},{'fruit_id':234, 'type':'apple', 'color':'green'}]

for fruit1 in b:
    for fruit2 in a:
        if fruit1['fruit_id'] == fruit2['fruit_id']:
            fruit2['color'] = fruit1['color']

print a # --> [{'color': 'green', 'type': 'apple', 'fruit_id': 234}]

您可以遍历两个列表来实现它。

答案 1 :(得分:0)

在纯Python中,字典列表对于计算很昂贵。我建议您使用第三方库(例如Pandas)来实现矢量化功能。这是一个示例:

a = [{'fruit_id':234, 'type': 'apple', 'color': 'red'}]

b = [{'fruit_id':235, 'type': 'kiwi', 'color': 'brown'},
     {'fruit_id':234, 'type': 'apple', 'color': 'green'}]

import pandas as pd

df_a = pd.DataFrame(a).set_index('fruit_id')
df_b = pd.DataFrame(b).set_index('fruit_id')

df_a.update(df_b)

res = df_a.reset_index().to_dict('records')

print(res)

[{'fruit_id': 234, 'color': 'green', 'type': 'apple'}]