如果关联值数组中的变量返回键?

时间:2018-04-16 22:08:20

标签: python python-3.x

我有一本技术词典,用于纠正技术术语的各种拼写。

如何使用此结构(或重构下面的代码才能工作)以便为任何替代拼写返回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)

2 个答案:

答案 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函数 - 编写一个函数只是为了创建一个字典是没有意义的,特别是当你立即用它返回的字典遮蔽函数时,你就不能这样做了。甚至再打电话。