我有一本技术词典,用于纠正技术术语的各种拼写。
如何使用此结构(或重构下面的代码才能工作)以便为任何替代拼写返回key
?
例如,如果某人写了"craniem"
,我希望返回"cranium"
。我已经尝试了许多不同的结构,包括下面的结构,并且不能完全使用它。
def techDict():
myDict = {
'cranium' : ['cranum','crenium','creniam','craniem'],
'coccyx' : ['coscyx','cossyx','koccyx','kosicks'],
'1814A' : ['Aero1814','A1814','1814'],
'SodaAsh' : ['sodaash','na2co3', 'soda', 'washingsoda','sodacrystals']
}
return myDict
techDict = techDict()
correctedSpelling = next(val for key, val in techDict.iteritems() if val=='1814')
print(correctedSpelling)
答案 0 :(得分:3)
使用 代替 = 可以解决问题
next(k for k, v in techDict.items() if 'craniem' in v)
答案 1 :(得分:2)
只需反转并压平字典:
tech_dict = {
'cranium': ['cranum', 'crenium', 'creniam', 'craniem'],
'coccyx': ['coscyx', 'cossyx', 'koccyx', 'kosicks'],
'1814A': ['Aero1814', 'A1814', '1814'],
'SodaAsh': ['sodaash', 'na2co3', 'soda', 'washingsoda', 'sodacrystals'],
}
lookup = {val: key for key, vals in tech_dict.items() for val in vals}
# ^ note dict.iteritems doesn't exist in 3.x
然后你可以轻而易举地获得:
corrected_spelling = lookup['1814']
这比搜索字典中每个键的每个列表更有效,以找到您的搜索词。
另请注意:1。遵守the official style guide; 2.我已经完全删除了techDict
函数 - 编写一个函数只是为了创建一个字典是没有意义的,特别是当你立即用它返回的字典遮蔽函数时,你就不能这样做了。甚至再打电话。