[英]lookup/map multiple keys in a dictionary and add to a list
My current code: 我目前的代码:
from nltk.tag import pos_tag, map_tag
search_term = 'quaker lemon banana oatmeal'
lst = []
search_term_words = search_term.split()
for w in search_term_words:
if w in flavor_grocer_mapping:
for flavor in flavor_grocer_mapping[w]:
if flavor in search_term:
lst.append((flavor, 'FLAVOR'))
for x in search_term.replace(flavor, '').split():
if x in brand_grocer_mapping:
for brand in brand_grocer_mapping[x]:
if brand in search_term.replace(flavor, '').split():
lst.append((brand, 'BRAND'))
for word, tag in pos_tag(word_tokenize(search_term.replace(flavor, '').replace(brand, '').strip())):
lst.append((word, map_tag('en-ptb', 'universal', tag)))
The result I got: 结果我得到了:
[('lemon', 'FLAVOR'),
('quaker', 'BRAND'),
('banana', 'NOUN'),
('oatmeal', 'NOUN'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('lemon', 'ADJ'),
('oatmeal', 'NOUN')]
My expected result is: 我的预期结果是:
[('lemon', 'FLAVOR'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('oatmeal', 'NOUN')]
I know the problem is that the splitted words in search terms run recursively in the for loops. 我知道问题是搜索术语中的分裂单词在for循环中递归运行。 How can lookup/map a whole string that contains multiple keys in a dictionary?
如何在字典中查找/映射包含多个键的整个字符串? (For example,
lemon
and banana
are in the search term string and they are the keys in the flavor_grocer_mapping
dictionary.) (例如,
lemon
和banana
在搜索词字符串中,它们是flavor_grocer_mapping
字典中的键。)
Well, I tried to recreate flavor_grocer_mapping
based on your results, your additional code to lookup is highly unnecessary. 好吧,我试图根据你的结果重新创建
flavor_grocer_mapping
,你需要额外的查找代码。 Instead, since you have a dictionary that corresponds to search_term_words
as keys, do a proper dictionary lookup in a list comprehension. 相反,由于您有一个与
search_term_words
对应的字典作为键,因此在列表search_term_words
中进行正确的字典查找。
search_term = 'quaker lemon banana oatmeal'
search_term_words = search_term.split()
#recreating your dictionary
flavor_grocer_mapping = [('lemon', 'FLAVOR'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('oatmeal', 'NOUN')]
flavor_grocer_mapping = {k:v for (k,v) in flavor_grocer_mapping}
#solution
results = [(word,flavor_grocer_mapping[word]) for word in search_term_words]
results
>>[('quaker', 'BRAND'),
('lemon', 'FLAVOR'),
('banana', 'FLAVOR'),
('oatmeal', 'NOUN')]
In the case of your provided example, I suggest your merge all the dictionaries to 1 instead of repeatedly looping over them. 对于您提供的示例,我建议您将所有字典合并为1而不是重复循环它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.