假设我有一个字典,键是类别名称,值是该类别中的单词。 例如:
words={
'seasons':('summer','spring','autumn','winter'),
'rooms':('kitchen','loo','livingroom','hall','diningroom','bedroom'),
'insects':('bee','butterfly','beetle')}
对于任何给定的输入,我想创建一个包含两个条目的列表,其中第一个条目是值词,第二个条目是关键词。 例如,预期的输出应该是:
input: kitchen
output: ['kitchen','rooms']
input: bee
output: ['bee','insects']
我检查了在字典中按值获取关键字的问题,但是我想所有的答案都适用于每个关键字有1个值的字典。
我尝试了以下简单的封闭窗体代码:
word=input('Enter a word: ')
word_pair=[]
word_pair.append(word)
if word in (words['seasons']):
index=0
elif word in (words['rooms']):
index=1
elif word in (words['insects']):
index=2
else:
index=3
try:
key_val=list(words.keys())[index]
word_pair.append(key_val)
except IndexError:
word_pair.append('NA')
print(word_pair)
显然,这段代码只对这个特定的字典按原样工作。 如果我想添加一个类别,我必须添加一个elif子句。 如果我想更改一个类别的名称或它们的顺序,删除一个,合并两个或更多,等等,我必须手动调整一大堆东西。
有没有更概括的方法来做到这一点?
感谢所有的帮助。
您可以用以下命令颠倒该词:
>>> {s_v:k for k,v in words.items() for s_v in v}
{'summer': 'seasons', 'spring': 'seasons', 'autumn': 'seasons', 'winter': 'seasons', 'kitchen': 'rooms', 'loo': 'rooms', 'livingroom': 'rooms', 'hall': 'rooms', 'diningroom': 'rooms', 'bedroom': 'rooms', 'bee': 'insects', 'butterfly': 'insects', 'beetle': 'insects'}
然后在倒写中查找您的输入。
您可以将generator与Unpacking一起使用:
inp = input()
result, *_ = ([inp, k] for k, v in words.items() if inp in v)
更好的做法是将next()
与生成器一起使用,因为它将在找到第一个匹配项后停止:
result = next([inp, k] for k, v in words.items() if inp in v)
你可以这样做:
words={
'seasons':('summer','spring','autumn','winter'),
'rooms':('kitchen','loo','livingroom','hall','diningroom','bedroom'),
'insects':('bee','butterfly','beetle')}
def find_cat(word):
for category, items in words.items():
if word in items:
return category
word=input('Enter a word: ')
print(find_cat(word))
说明:words.items()
为字典中的每个键返回一个元组(键,值)。 在本例中,value是一个列表。 因此,我们可以使用in
运算符来查找字
是否在该列表中。 如果是,只需返回密钥。