我有一个字典a和B的列表。我想看看a中的每一个字典,特别是字典B中是否存在a['serial_number']和a['date_out']的组合。对于下面的例子,情况1为TRUE,因为‘AAA’和‘2022-3-26’的组合存在于B中的字典中。情况2为FALSE,即使‘BBB’确实存在于B的字典中,"BBB"one_answers"2022-3-27"的组合不存在。它们都是单独存在的,但放在一起就不存在了。
有没有一种有效的方法可以在下面搜索A中的每个组合,看看它是否存在于B中?如果它不存在,我想返回序列号和日期输出。
List A = [{'serial_number': 'AAA', 'cycle_number': 1, 'date_out': '2022-3-26'},
{'serial_number': 'BBB', 'cycle_number': 2, 'date_out': '2022-3-27'},
{'serial_number': 'CCC', 'cycle_number': 3, 'date_out': '2022-3-28'},
{'serial_number': 'AAA', 'cycle_number': 3, 'date_out': '2022-3-29'},
{'serial_number': 'BBB', 'cycle_number': 3, 'date_out': '2022-3-29'}]
List B = [{'serial_number': 'AAA', 'cycle_number': 1, 'date_out': '2022-3-19'},
{'serial_number': 'BBB', 'cycle_number': 2, 'date_out': '2022-3-20'},
{'serial_number': 'CCC', 'cycle_number': 3, 'date_out': '2022-3-27'},
{'serial_number': 'AAA', 'cycle_number': 3, 'date_out': '2022-3-26'},
{'serial_number': 'BBB', 'cycle_number': 3, 'date_out': '2022-3-23'}]
A = [
{'serial_number': 'AAA', 'cycle_number': 1, 'date_out': '2022-3-26'},
{'serial_number': 'BBB', 'cycle_number': 2, 'date_out': '2022-3-27'},
{'serial_number': 'CCC', 'cycle_number': 3, 'date_out': '2022-3-28'},
{'serial_number': 'AAA', 'cycle_number': 3, 'date_out': '2022-3-29'},
{'serial_number': 'BBB', 'cycle_number': 3, 'date_out': '2022-3-29'}
]
B = [
{'serial_number': 'AAA', 'cycle_number': 1, 'date_out': '2022-3-19'},
{'serial_number': 'BBB', 'cycle_number': 2, 'date_out': '2022-3-20'},
{'serial_number': 'CCC', 'cycle_number': 3, 'date_out': '2022-3-27'},
{'serial_number': 'AAA', 'cycle_number': 3, 'date_out': '2022-3-26'},
{'serial_number': 'BBB', 'cycle_number': 3, 'date_out': '2022-3-23'}
]
print(
{ (x['serial_number'], x['date_out']) for x in A }.intersection(
{ (x['serial_number'], x['date_out']) for x in B })
)
输出是一组包含共同值的元组:
{('AAA', '2022-3-26')}
首先,创建一个包含B['serial_number']
和B['date_out']
的元组的set
。然后,为A
的每个元素创建类似的元组,并查找它是否存在于set
中。
b = set([(x["serial_number"], x["date_out"]) for x in B])
[(x["serial_number"], x["date_out"]) in b for x in A]
# [True, False, False, False, False]
同时检查
b = set([(x["serial_number"], x["date_out"]) for x in B])
a = set([(x["serial_number"], x["date_out"]) for x in A])
b - a
a - b
a.intersection(b)