繁体   English   中英

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

[英]Python check if two key/value pairs exists in a list of dictionaries?

我有一个字典 A 和 B 的列表。我想查看 A 中的每个字典,特别是字典 B 中是否存在 A['serial_number'] 和 A['date_out'] 的组合。对于下面的示例1 将为 TRUE,因为 B 的字典中存在“AAA”和“2022-3-26”的组合。案例 2 将为 FALSE,即使 B 的字典中确实存在“BBB”,但“BBB”的组合' 和 '2022-3-27' 不存在。 它们都是单独存在的,但放在一起时就不存在了。

有没有一种有效的方法可以在下面搜索 A 中的每个组合,看看它是否存在于 B 中? 如果它不存在,我想返回序列号和 date_out。

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 })
)

Output 是一组包含共同值的元组:

{('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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM