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

我的用户将传入前三组中的一个名称,或 all_names 中的一个键。用户传入的名称不区分大小写,但我需要返回相应的名称,因为它们在集合中大写。如果他们传入一个键,我可以毫无问题地获取名称列表,但是有没有一种好方法,如果用户传入说'nadeen',我可以在 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 回答
0

我会创建一个字典,将小写单词映射到具有适当大小写的单词:

>>> set1 = set(['Bob', 'Jim', 'RALPH'])
>>> set2 = set(['Jill', 'Nadeen', 'WaterBottle'])
>>> set3 = set(['ThisIsOne', 'ThisIsTwo'])
>>> d = {x.lower():x for x in set1|set2|set3}
>>> d
{'thisistwo': 'ThisIsTwo', 'thisisone': 'ThisIsOne', 'waterbottle': 'WaterBottle', 'jim': 'Jim', 'ralph': 'RALPH', 'jill': 'Jill', 'nadeen': 'Nadeen', 'bob': 'Bob'}

现在您只需要验证小写输入。从您的帖子中,很难说您是否应该为每组使用字典,还是只使用主字典,但我认为最终的想法是相同的。

于 2013-06-19T11:46:39.680 回答