【发布时间】:2018-05-23 16:49:54
【问题描述】:
我有一个元组列表(大约 300 个),每个元组由两个项目组成。第一项是关键字,第二项是包含关键字的字符串列表。下面的函数最初应该生成一个由长字符串或空白列表组成的元组。例如
beginning = [('keyword1', [] [] ['$5'] ['This has $6.50'], ['this has 4']), ('keyword2', [] [] [] [], []['5.5'])]
我希望我的最终输出删除空白列表并提供一个元组列表,其中第一个是关键字,第二个是在包含关键字的 cmets 中提到的价格,最后一个是任何数字提到没有附加货币符号。例如,
desired_output = [('keyword1', ['$6.50'] ['$5'], ['4']), ('keyword2',[],['5.5'])]
我有以下功能,但读取时出现错误:
TypeError: expected string or bytes-like object
有没有办法修改以下函数以提高效率或使用其当前结构运行。
import re
def collect_keyterms(list_of_tuples):
price_re = re.compile(r'^.*[\$\£\€]\s?\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{1,2})?.*$')
number_re = re.compile(r'\b\d[.]\d{1,2}\b')
new_list = [(keyword, [re.findall(price_re, post) for post in posts], [re.findall(number_re, post) for post in posts]) for keyword, posts in tuples_with_keyword_posts]
final = [(keyword, list(filter(lambda x:re.findall(r'\d', x), currencies)), list(filter(lambda y:re.findall(r'\d', y), posts))) for keyword, currencies, posts in new_list]
return final
【问题讨论】:
-
如此处所述,docs.python.org/3/library/stdtypes.html#str.isdigit isdigit() 是一个字符串方法,它不能用于整数或浮点数。
标签: python regex lambda tuples