回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我怎么知道difflib.get_close_匹配项()忽略大小写?我有一本字典,它有一个明确的格式,包括大写。但是,测试字符串可能有完全资本化或没有资本化,这些应该是等价的。但是,结果需要适当地大写,所以我不能使用修改过的字典。在</p>
<pre><code>import difflib
names = ['Acacia koa A.Gray var. latifolia (Benth.) H.St.John',
'Acacia koa A.Gray var. waianaeensis H.St.John',
'Acacia koaia Hillebr.',
'Acacia kochii W.Fitzg. ex Ewart & Jean White',
'Acacia kochii W.Fitzg.']
s = 'Acacia kochi W.Fitzg.'
# base case: proper capitalisation
print(difflib.get_close_matches(s,names,1,0.9))
# this should be equivalent from the perspective of my program
print(difflib.get_close_matches(s.upper(),names,1,0.9))
# this won't work because of the dictionary formatting
print(difflib.get_close_matches(s.upper().capitalize(),names,1,0.9))
</code></pre>
<p>输出:</p>
^{pr2}$
<p><strong>工作代码:</strong></p>
<p>根据Hugh Bothwell的回答,我对代码进行了如下修改,以获得一个有效的解决方案(当返回多个结果时,该方案也应该有效):</p>
<pre><code>import difflib
names = ['Acacia koa A.Gray var. latifolia (Benth.) H.St.John',
'Acacia koa A.Gray var. waianaeensis H.St.John',
'Acacia koaia Hillebr.',
'Acacia kochii W.Fitzg. ex Ewart & Jean White',
'Acacia kochii W.Fitzg.']
test = {n.lower():n for n in names}
s1 = 'Acacia kochi W.Fitzg.' # base case
s2 = 'ACACIA KOCHI W.FITZG.' # test case
results = [test[r] for r in difflib.get_close_matches(s1.lower(),test,1,0.9)]
results += [test[r] for r in difflib.get_close_matches(s2.lower(),test,1,0.9)]
print results
</code></pre>
<p>输出:</p>
<pre><code>['Acacia kochii W.Fitzg.', 'Acacia kochii W.Fitzg.']
</code></pre>