3

私は3セットと口述を持っています。私のセットは次のようになります。

set1 = set(['Bob', 'Jim', 'RALPH'])
set2 = set(['Jill', 'Nadeen', 'WaterBottle'])
set3 = set(['ThisIsOne', 'ThisIsTwo'])
all_names = {'first_one': set1, 
             'second_one': set2, 
             'third_one': set3, 
             'all':set1 | set2 | set3}

#I can make it work if I do this:
r = re.search(input, "','".join(all_names['all'])
if r:
    name = all_names[r.group()]

ユーザーは、最初の 3 つのセットの名前のいずれか、または all_names のキーのいずれかを渡します。ユーザーが渡す名前は大文字と小文字が区別されませんが、セットで大文字になっているため、対応する名前を返す必要があります。キーを渡せば名前のリストを取得するのに問題はありませんが、ユーザーが「ナディーン」と言って渡した場合、all_names['all'] で簡単に (そして効率的に) 見つけることができる良い方法はありますか?

しかし、上司はこれが最善の方法だとは考えていません。これに理解を使用する方法はありますか?他のアイデアはありますか?

4

2 に答える 2

6

まあ、かなり素朴なアプローチは、次のように反復しall_names['all']て大文字と小文字を区別しないチェックを行うことです。

input = input.lower()
result = [item for item in all_names['all'] if item.lower() == input]

または、別の方法は、セットから小文字の項目を含むリストを検索することです。

input.lower() in map(lambda x: x.lower(), all_names['all'])
于 2013-06-19T11:47:49.220 に答える