Игнорировать регистр с difflib.get _закрыть _соответствует()

Как я могу сказать difflib.get _close _соответствует ()игнорировать регистр? У меня есть словарь с определенным форматом, который включает заглавные буквы. Однако тестовая строка может иметь полный или не использовать заглавные буквы, и они должны быть эквивалентны. Однако результаты должны быть правильно написаны с заглавной буквы, поэтому я не могу использовать модифицированный словарь.

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))

Выход:

['Acacia kochii W.Fitzg.']
[]
[]

Рабочий код:

Основываясь на ответе Хью Ботвелла, я изменил код следующим образом, чтобы получить рабочее решение (, которое также должно работать, когда возвращается более одного результата):

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

Выход:

['Acacia kochii W.Fitzg.', 'Acacia kochii W.Fitzg.']
8
задан rudivonstaden 8 July 2012 в 18:04
поделиться