Clean_data是包含超过9000个文本文件的列表。 rules是包含500多个元素的字典列表。以下是规则列表
rules = [{'id': 1, 'kwd_root': 'add', 'kwd_sub': 'price target', 'word_count': 5, 'occurance': 1, 'kwd_search': 1, 'status': 1}, {'id': 2, 'kwd_root': 'add', 'kwd_sub': 'PT', 'word_count': 5, 'occurance': 1, 'kwd_search': 1, 'status': 1},.....]
我的问题是:我需要为clean_data list中的每个元素应用规则。下面是我使用过的代码
for word in clean_data:
for i,d in enumerate(rules):
if any(d['kwd_root'] in word and d['kwd_sub'] in word):
if abs(word.index(d['kwd_root']) - word.index(d['kwd_sub'])) <= d['word_count']:
research.append(word)
else:
non_research.append(word)
else:
non_research.append(word)
运行此代码后,我将len(non_research)设为110000,len(研究)为5500
但len(non_research)+ len(研究)的预期输出应该等于len(clean_data)
由于
答案 0 :(得分:0)
发布的代码缩进是错误的。另一方面,第3行使用“any”,需要列表作为参数。此外,research / non_research会为每个单词和每个条件(单词x条件次数)附加一个值。也许你可以使用:
for word in clean_data:
flag_rules = False
for i,d in enumerate(rules):
if d['kwd_root'] in word and d['kwd_sub'] in word:
if abs(word.index(d['kwd_root']) - word.index(d['kwd_sub'])) <= d['word_count']:
flag_rules = True
if flag_rules:
research.append(word)
else:
non_research.append(word)