【发布时间】:2025-12-26 01:45:11
【问题描述】:
假设我有一个这样的列表/元组。
dic = ({name: 'Kan',number: '2ABC345', year: '2000'},
{name: 'Jhon',number: '2TTC345', year: '2001'},
{name: 'Louise',number: '2ABC366', year: '2001'},
{name: 'Kevin',number: '2ABY000', year: '2002'})
如何在此列表中使用过滤器和正则表达式? 我正在考虑这样的事情,但我似乎无法更正代码。
def func(dic, expression, keysection):
r = re.compile(dic)
x = list(filter(lambda x: r.findall(rexpression) in x[keysection], dic))
print(x)
假设我想要 2000 年,我会做这样的事情,
func(dic, 2000, 'year')
>>> [{name: 'Kan',number: '2ABC345', year: 2000}]
或者名字的第一个字母是k,
func(dic, '^K', 'name')
>>> [ {name: 'Kan',number: '2ABC345', year: 2000}, {name: 'Kevin',number: '2ABY000', year: 2002}]
或者看数字是否以2开头,有7个数字,
func(dic, '2\d{7}', 'number')
>>> [ {name: 'Kan',number: '2ABC345', year: 2000}, {name: 'Jhon',number: '2TTC345', year: 2001},{name: 'Louise',number: '2ABC366', year: 2001}, {name: 'Kevin',number: '2ABY000', year: 2002} ]
问题是,我是正则表达式的新手,我不确定上面的代码是否正确,以及使用正则表达式过滤器的最佳和最 Python 的方式是什么。
【问题讨论】:
-
您尝试实现的所有功能都已存在于
filter()中。你通过 callable 哪个检查条件,这是最“pythonic”的方式。 -
是的,但我不知道如何将它与正则表达式一起使用
-
filter(lambda d: re.match(r'2\d{6}', d['number']), dic) -
dic中的所有键都必须是字符串。否则,您将调用变量name,例如。 -
不明白你是在谈论年份键,如果是的话,它也会在字符串中
标签: python python-3.x regex dictionary