我有两个列表(通常它们在这里只是一个例子):
第一个包含Destination
,mid
,TypeSource
,TypeDestination
和Time
[{'Destination': 'me.xx@domain.fr', 'mid': '6754', 'Type S': 'VOICE', 'Origine': '+45854521', 'Type D': 'SMTP.0', 'Time': '08:29:50.293'}, {'Destination': 'fax.server@domain.fr', 'mid': '6755', 'Type S': 'FAXG3', 'Origine': 'p0298220991', 'Type D': 'SMTP.0', 'Time': '08:55:33.731'}]
第二个列表包含mid和status以了解是否发送了消息,有时会出现错误并在重复后发送,如示例中所示
[{'status': 'OK', 'mid': '6754'}, {'status': 'Erreur', 'mid': '6755'}, {'status': 'OK', 'mid': '6755'}]
有没有办法进行测试,以查看mid
中是否存在the first table
中存在的second table
,如果是append the status
到the first
从second
??中提取它
答案 0 :(得分:2)
>>> A = [{'Destination': 'me.xx@domain.fr', 'mid': '6754', 'Type S': 'VOICE', 'Origine': '+45854521', 'Type D': 'SMTP.0', 'Time': '08:29:50.293'}, {'Destination': 'fax.server@domain.fr', 'mid': '6755', 'Type S': 'FAXG3', 'Origine': 'p0298220991', 'Type D': 'SMTP.0', 'Time': '08:55:33.731'}]
>>> B = [{'status': 'OK', 'mid': '6754'}, {'status': 'Erreur', 'mid': '6755'}, {'status': 'OK', 'mid': '6756'}]
>>> mid_status = {}
>>> for d in B:
mid_status.setdefault(d['mid'], []).append(d['status'])
>>> for d in A:
if d['mid'] in mid_status:
d['status'] = mid_status[d['mid']]
>>> A
[{'status': ['OK'], 'Destination': 'me.xx@domain.fr', 'mid': '6754', 'Type S': 'VOICE', 'Origine': '+45854521', 'Time': '08:29:50.293', 'Type D': 'SMTP.0'}, {'status': ['Erreur'], 'Destination': 'fax.server@domain.fr', 'mid': '6755', 'Type S': 'FAXG3', 'Origine': 'p0298220991', 'Time': '08:55:33.731', 'Type D': 'SMTP.0'}]
如果没有状态,您可能需要状态的默认值,在这种情况下使用:
for d in A:
d['status'] = mid_status.get(d['mid'], [])
修改:根据请求更新,以包含对多种状态的支持