Python检查字典列表中是否存在两个键/值对



我有一个字典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)

相关内容

  • 没有找到相关文章

最新更新