【发布时间】:2020-08-06 06:57:51
【问题描述】:
我在 Python 3.7 中有两个字典数组,我需要使用一个公共键加入它们。
array_1 = [
{'address1': 'KR 10 B # 14 - 03', 'id': 6605, 'commune1': 'COMUNA 2'},
{'address1': 'KR 90 # 2 OESTE - 17', 'id': 9565, 'commune1': 'COMUNA 18'},
{'address1': 'CL 72 J # 5 NORTE - 70', 'id': 8493, 'commune1': 'COMUNA 6'},
{'address1': 'PAISAJES DEL CASTILLO CS 29', 'id': 10330, 'commune1': ''}
]
array_2 = [
{'coddirplaca': 'A', 'id': 9565},
{'coddirplaca': 'B','id': 6605},
{'coddirplaca': 'C','id': 10330},
{'coddirplaca': 'D','id': 8493}
]
所以,我需要一个这样的数组:
array_3 = [
{'address1': 'KR 10 B # 14 - 03', 'id': 6605, 'commune1': 'COMUNA 2', 'coddirplaca': 'B'},
{'address1': 'KR 90 # 2 OESTE - 17', 'id': 9565, 'commune1': 'COMUNA 18', 'coddirplaca': 'A'},
{'address1': 'CL 72 J # 5 NORTE - 70', 'id': 8493, 'commune1': 'COMUNA 6', 'coddirplaca': 'D'},
{'address1': 'PAISAJES DEL CASTILLO CS 29', 'id': 10330, 'commune1': '', 'coddirplaca': 'C'}
]
我有这段代码,它将来自array_1 的一个字典与来自array_2 的所有列表进行比较并且工作良好,但是这修改了我原来的array_1:
for dict_1 in array_1:
for index in range(len(array_2)):
dict_2 = array_2[index]
if dict_1['id'] == dict_2['id']:
dict_1['coddirplaca'] = dict_2['coddirplaca'] # I create a new key/value in each dict_2
print(array_1)
如何优化这个循环?
注意:array_1 和 array_2 始终具有相同的长度。
【问题讨论】:
-
您是否考虑过将它们转换为 pandas 数据帧并使用其连接功能?
-
@Barmar 是的,事实上,
array_3将被传递给 pandas.Dataframe() 以获取 Dataframe。那么您认为将array_1和array_2转换为pandas 数据框更好吗? -
这可能会更容易。
-
array_3 = [{**x, **y} for x in array_1 for y in array_2 if y["id"] == x["id"]] -
由于这个问题已关闭,我已将我的 pandas 答案添加到链接的问题中。简而言之,您可以在将 pandas 导入为
pd后使用pd.DataFrame(array_1).merge(pd.DataFrame(array_2), on=['id']).to_dict('records')。如果您想保留数据框,只需删除.to_dict('records')。
标签: python python-3.x optimization