[英]lookup/map multiple keys in a dictionary and add to a list
我目前的代碼:
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)))
結果我得到了:
[('lemon', 'FLAVOR'),
('quaker', 'BRAND'),
('banana', 'NOUN'),
('oatmeal', 'NOUN'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('lemon', 'ADJ'),
('oatmeal', 'NOUN')]
我的預期結果是:
[('lemon', 'FLAVOR'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('oatmeal', 'NOUN')]
我知道問題是搜索術語中的分裂單詞在for循環中遞歸運行。 如何在字典中查找/映射包含多個鍵的整個字符串? (例如, lemon
和banana
在搜索詞字符串中,它們是flavor_grocer_mapping
字典中的鍵。)
好吧,我試圖根據你的結果重新創建flavor_grocer_mapping
,你需要額外的查找代碼。 相反,由於您有一個與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')]
對於您提供的示例,我建議您將所有字典合並為1而不是重復循環它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.