英文:
Reverse dictionary mapping incorrectly
问题
I have a ingredient_dict
dictionary I'm trying to apply in reverse to the Ingredients
column wherever values in the column appear as values in the key-value pairs.
ingredient_dict = {
'Aardappelen': ('Dunne frieten', 'Half kruimige aardappelen', 'Voorgekookte halve kriel met schil',
'Kruimige aardappelen', 'Roodschillige aardappelen', 'Opperdoezer Ronde aardappelen'),
'Kipgehakt': ('Gemengd gekruid gehakt', 'Kipgehakt met Mexicaanse kruiden', 'Half-om-halfgehakt met Italiaanse kruiden',
'Kipgehakt met tuinkruiden'),
'Ui': ("Rode ui"),
'Kipfilet': ('Kipfilet met tuinkruiden en knoflook'),
'Kipworst': ('Gekruide kipworst'),
'Kipshoarma': ('Kalkoenshoarma')
}
reverse_label_ing = {x:k for k,v in ingredient_dict.items() for x in v}
# df_check["Ingredients"].replace(reverse_label_ing, inplace=True)
When I show the reverse_label_ing
result I see "Aardappelen" for example was reversed correctly but I get issues with "Rode ui" and "Gekruide kipworst" and "Kalkoenshoarma" and I'm not sure why. Anyone know why the individual characters of "Rode ui" for instance are showing up as individual keys?:
reverse_label_ing
{'Dunne frieten': 'Aardappelen',
'Half kruimige aardappelen': 'Aardappelen',
'Voorgekookte halve kriel met schil': 'Aardappelen',
'Kruimige aardappelen': 'Aardappelen',
'Roodschillige aardappelen': 'Aardappelen',
'Opperdoezer Ronde aardappelen': 'Aardappelen',
'Gemengd gekruid gehakt': 'Kipgehakt',
'Kipgehakt met Mexicaanse kruiden': 'Kipgehakt',
'Half-om-halfgehakt met Italiaanse kruiden': 'Kipgehakt',
'Kipgehakt met tuinkruiden': 'Kipgehakt',
'R': 'Ui',
'o': 'Kipshoarma',
'd': 'Kipworst',
'e': 'Kipshoarma',
' ': 'Kipworst',
'u': 'Kipworst',
'i': 'Kipworst',
'K': 'Kipshoarma',
'p': 'Kipworst',
'f': 'Kipfilet',
'l': 'Kipshoarma',
't': 'Kipworst',
'm': 'Kipshoarma',
'n': 'Kipshoarma',
'k': 'Kipshoarma',
'r': 'Kipshoarma',
'G': 'Kipworst',
'w': 'Kipworst',
's': 'Kipshoarma',
'a': 'Kipshoarma',
'h': 'Kipshoarma'}
英文:
I have a ingredient_dict
dictionary I'm trying to apply in reverse to the Ingredients
column wherever values in the column appear as values in the key-value pairs.
ingredient_dict = {
'Aardappelen': ('Dunne frieten', 'Half kruimige aardappelen', 'Voorgekookte halve kriel met schil',
'Kruimige aardappelen', 'Roodschillige aardappelen', 'Opperdoezer Ronde aardappelen'),
'Kipgehakt': ('Gemengd gekruid gehakt', 'Kipgehakt met Mexicaanse kruiden', 'Half-om-halfgehakt met Italiaanse kruiden',
'Kipgehakt met tuinkruiden'),
'Ui': ("Rode ui"),
'Kipfilet': ('Kipfilet met tuinkruiden en knoflook'),
'Kipworst': ('Gekruide kipworst'),
'Kipshoarma': ('Kalkoenshoarma')
}
reverse_label_ing = {x:k for k,v in ingredient_dict.items() for x in v}
# df_check["Ingredients"].replace(reverse_label_ing, inplace=True)
When I show the reverse_label_ing
result I see "Aardappelen" for example was reversed correctly but I get issues with Rode ui
and Gekruide kipworst
and Kalkoenshoarma
and I'm not sure why. Anyone know why the individual characters of "Rode ui" for instance are showing up as individual keys?:
reverse_label_ing
{'Dunne frieten': 'Aardappelen',
'Half kruimige aardappelen': 'Aardappelen',
'Voorgekookte halve kriel met schil': 'Aardappelen',
'Kruimige aardappelen': 'Aardappelen',
'Roodschillige aardappelen': 'Aardappelen',
'Opperdoezer Ronde aardappelen': 'Aardappelen',
'Gemengd gekruid gehakt': 'Kipgehakt',
'Kipgehakt met Mexicaanse kruiden': 'Kipgehakt',
'Half-om-halfgehakt met Italiaanse kruiden': 'Kipgehakt',
'Kipgehakt met tuinkruiden': 'Kipgehakt',
'R': 'Ui',
'o': 'Kipshoarma',
'd': 'Kipworst',
'e': 'Kipshoarma',
' ': 'Kipworst',
'u': 'Kipworst',
'i': 'Kipworst',
'K': 'Kipshoarma',
'p': 'Kipworst',
'f': 'Kipfilet',
'l': 'Kipshoarma',
't': 'Kipworst',
'm': 'Kipshoarma',
'n': 'Kipshoarma',
'k': 'Kipshoarma',
'r': 'Kipshoarma',
'G': 'Kipworst',
'w': 'Kipworst',
's': 'Kipshoarma',
'a': 'Kipshoarma',
'h': 'Kipshoarma'}
答案1
得分: 2
如果你想让ingredient_dict
中的每个值都是一个元组,你需要在括号内加上一个逗号:
ingredient_dict = {
'Aardappelen': ('Dunne frieten', 'Half kruimige aardappelen', 'Voorgekookte halve kriel met schil',
'Kruimige aardappelen', 'Roodschillige aardappelen', 'Opperdoezer Ronde aardappelen'),
'Kipgehakt': ('Gemengd gekruid gehakt', 'Kipgehakt met Mexicaanse kruiden', 'Half-om-halfgehakt met Italiaanse kruiden',
'Kipgehakt met tuinkruiden'),
'Ui': ("Rode ui",),
'Kipfilet': ('Kipfilet met tuinkruiden en knoflook',),
'Kipworst': ('Gekruide kipworst',),
'Kipshoarma': ('Kalkoenshoarma',)
}
按照你当前的定义,单元素的条目是字符串,因此你的迭代会拆分字符串(字符串是字符的可迭代对象)而不是字符串的元组。
如果你确实希望你的字典是元组和字符串的混合(我不建议这样做——一致的数据类型更容易处理),你可以通过在反向推导中检查每个值v
是否是元组来进行适应:
>>> {x: k for k, v in ingredient_dict.items() for x in (v if isinstance(v, tuple) else (v,))}
{'Dunne frieten': 'Aardappelen', 'Half kruimige aardappelen': 'Aardappelen', 'Voorgekookte halve kriel met schil': 'Aardappelen', 'Kruimige aardappelen': 'Aardappelen', 'Roodschillige aardappelen': 'Aardappelen', 'Opperdoezer Ronde aardappelen': 'Aardappelen', 'Gemengd gekruid gehakt': 'Kipgehakt', 'Kipgehakt met Mexicaanse kruiden': 'Kipgehakt', 'Half-om-halfgehakt met Italiaanse kruiden': 'Kipgehakt', 'Kipgehakt met tuinkruiden': 'Kipgehakt', 'Rode ui': 'Ui', 'Kipfilet met tuinkruiden en knoflook': 'Kipfilet', 'Gekruide kipworst': 'Kipworst', 'Kalkoenshoarma': 'Kipshoarma'}
英文:
If you mean for each value in ingredient_dict
to be a tuple, you need to add a trailing comma inside the parens:
ingredient_dict = {
'Aardappelen': ('Dunne frieten', 'Half kruimige aardappelen', 'Voorgekookte halve kriel met schil',
'Kruimige aardappelen', 'Roodschillige aardappelen', 'Opperdoezer Ronde aardappelen'),
'Kipgehakt': ('Gemengd gekruid gehakt', 'Kipgehakt met Mexicaanse kruiden', 'Half-om-halfgehakt met Italiaanse kruiden',
'Kipgehakt met tuinkruiden'),
'Ui': ("Rode ui",),
'Kipfilet': ('Kipfilet met tuinkruiden en knoflook',),
'Kipworst': ('Gekruide kipworst',),
'Kipshoarma': ('Kalkoenshoarma',)
}
The way you've defined it, the single-element entries are strings, so your iteration is unpacking the string (which is an iterable of characters) instead of a tuple of strings.
If you actually wanted your dictionary to be a mix of tuples and strings (I do not advise this -- consistent data types are much easier to work with), you could adapt your reverse comprehension to that by having it check whether each value v
is a tuple or not:
>>> {x:k for k,v in ingredient_dict.items() for x in (v if isinstance(v, tuple) else (v,))}
{'Dunne frieten': 'Aardappelen', 'Half kruimige aardappelen': 'Aardappelen', 'Voorgekookte halve kriel met schil': 'Aardappelen', 'Kruimige aardappelen': 'Aardappelen', 'Roodschillige aardappelen': 'Aardappelen', 'Opperdoezer Ronde aardappelen': 'Aardappelen', 'Gemengd gekruid gehakt': 'Kipgehakt', 'Kipgehakt met Mexicaanse kruiden': 'Kipgehakt', 'Half-om-halfgehakt met Italiaanse kruiden': 'Kipgehakt', 'Kipgehakt met tuinkruiden': 'Kipgehakt', 'Rode ui': 'Ui', 'Kipfilet met tuinkruiden en knoflook': 'Kipfilet', 'Gekruide kipworst': 'Kipworst', 'Kalkoenshoarma': 'Kipshoarma'}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论