Python 中 lambda 完全匹配

问题描述 投票:0回答:1

我已经阅读了许多具有类似主题的其他帖子,但没有一个真正解决了我的问题。我正在尝试对数据对列表进行搜索,其中密钥完全匹配,而不仅仅是包含在数据对的密钥中。另一个警告是,这必须使用变量输入而不是静态输入来完成。

例如: 如果我有一个包含“High”、“Hi”、“Low”和“Lo”键的数据对列表,并且要匹配的输入是“Hi”,我需要返回该键的确切数据对。假设输入由变量键表示,代码

next(filter(lambda x: key in x.Key, list))
返回以“High”作为第一个匹配的数据对。

调整代码以使用带有匹配的正则表达式,

next(filter(lambda x: re.match(key, x.Key), list))
,仍然返回键为“High”的数据对,因为它是遇到的第一个数据对,并且没有进行精确匹配。我尝试实现完全匹配,
next(filter(lambda x: re.fullmatch(key, x.Key), list))
,但这会导致没有返回数据对。

我有一种感觉,我在正则表达式中遗漏了一些东西,因为我在调用中看到了许多使用 ^ 和 $ 的引用,但它们不能与变量键连接,所以不确定我将如何处理如果这确实是我需要的。

有人知道我在 lambda 中缺少什么,以便使其完全匹配并返回以“Hi”为键的数据对吗?

python regex list lambda match
1个回答
0
投票

如果您尝试通过精确匹配来过滤数据对列表,为什么需要正则表达式?您可以简单地使用 == 运算符来精确匹配字符串。

如果你有字典列表:

data_pairs = [
    {'Key': 'High', 'Value': 'Something'},
    {'Key': 'Hi', 'Value': 'Something else'},
    {'Key': 'Low', 'Value': 'Yet something else'},
    {'Key': 'Lo', 'Value': 'Again, something else'}
]

key = 'Hi'
result = next(filter(lambda x: x['Key'] == key, data_pairs), None)

print(result)

如果你有元组:

data_pairs = [
    ('High', 'Something'),
    ('Hi', 'Something else'),
    ('Low', 'Yet something else'),
    ('Lo', 'Again, something else')
]

key = 'Hi'
result = next(filter(lambda x: x[0] == key, data_pairs), None)

print(result)

您可以将此逻辑应用于您想要的任何类似对象。

© www.soinside.com 2019 - 2024. All rights reserved.