<p>我支持巴斯·伊尔沙德,<em>规范化</em>你的输入。以及您的参考数据(见下文)。此外,一个<code>dict</code>的<code>set</code>s<del>的<code>dict</code>索引可能是</del>对于您的用例来说绝对是一个更好的数据结构</p>
<pre><code>known_adj = {+4: {'legendary', 'legend', 'finest', 'insane', 'best'},
+3: {'favorite', 'favourite', 'fav', 'delicious', 'awesome',
'perfect', 'perfection', 'perfectly', 'scrumptous'},
... }
total_val = sum(val for val in known_adj for adj in adjectives
if adj.strip().lower() in known_adj[val])
</code></pre>
<p>如果在匹配后跳过进一步的比较,<code>for</code>循环会更有效(<strong>编辑:</strong><em>,还提供了一种简单的方法来计算OP程序在循环期间累积的匹配总数,</em>我刚刚忘记了这个细节…)</p>
<pre><code>total_val = 0
# added in edit
total_matches = 0
for adj in adjectives:
adj = adj.strip().lower()
for val in known_adj:
if adj in known_adj[val]:
total_val += val
# added in edit
total_matches += 1
continue
</code></pre>
<p>你可能想做的另一件事是消毒</p>
<pre><code> from itertools import combinations
...
known_adj = update_ka()
for i, j in combinations(known_adj.keys(),2):
if known_adj[i].intersection(known_adj[j]):
# not an empty set, there is a repetition!
# print/log a warning, stop the machines, etc, you decide
</code></pre>