如何在Python字典列表中删除长度超过指定阈值的单词
实现方案
你可以用正则提取单词中的纯字母做长度判断,保留原结构的前提下完成过滤,参考代码如下:
import re def process_single_str(raw_str: str, max_letter_len: int = 9) -> str: # 按空格拆分字符串为独立token tokens = raw_str.split() filtered = [] for token in tokens: # 提取纯字母计算长度,过滤超过阈值的token letter_part = re.sub(r'[^a-zA-Z]', '', token) if len(letter_part) <= max_letter_len: filtered.append(token) # 处理标点前的多余空格,符合示例输出格式 res = ' '.join(filtered).replace(' !', '!').replace(' .', '.').replace(' ,', ',') return res def filter_long_words(raw_list: list, max_len: int = 9) -> list: res_list = [] for item in raw_list: # 复制原字典,避免修改原始数据 new_item = item.copy() # 处理text字段 new_item['text'] = [process_single_str(s, max_len) for s in item['text']] # 若需要同时处理text_2中的文本,取消下方注释即可 # new_text2 = [] # for tup in item['text_2']: # t = list(tup) # t[2] = process_single_str(t[2], max_len) # new_text2.append(tuple(t)) # new_item['text_2'] = new_text2 res_list.append(new_item) return res_list # 调用测试 myList = [ { 'id':1, 'text':['I like cheese.', 'I love cheese.', 'oh Ilikecheese !'], 'text_2': [('david', 'david', 'I do not like cheese.'), ('david', 'david', 'cheese is good.')] }, { 'id':2, 'text':['I like strawberry.', 'I love strawberry'], 'text_2':[('alice', 'alice', 'strawberry is good.'), ('alice', 'alice', ' strawberry is so so.')] } ] # 可自行调整max_len参数修改最长字母阈值 processed = filter_long_words(myList, max_len=9) print(processed)
输出结果和你给出的理想示例完全一致,如果你需要保留strawberry这类长度为10的正确拼写单词,把max_len参数调整为10即可。
内容的提问来源于stack exchange,提问作者Alina
相关产品推荐
相关产品推荐

