我正在尝试用HTML实体替换特殊字符,但是在相同的输入下结果是随机的,我不明白为什么。
这是代码:
def secure(text):
hsconvert = {"\'": "\\'", "\"": "\\\"", "¢": "¢", "©": "©", "÷": "÷", ">": ">", "<": "<", "µ": "µ", "·": "·", "¶": "¶", "±": "±", "€": "€", "£": "£", "®": "®", "§": "§", "™": "™", "¥": "¥", "á": "á", "Á": "Á", "à": "à", "À": "À", "â": "â", "Â": "Â", "å": "å", "Å": "Å", "ã": "ã", "Ã": "Ã", "ä": "ä", "Ä": "Ä", "æ": "æ", "Æ": "Æ", "ç": "ç", "Ç": "Ç", "é": "é", "É": "É", "è": "è", "È": "È", "ê": "ê", "Ê": "Ê", "ë": "ë", "Ë": "Ë", "í": "í", "Í": "Í", "ì": "ì", "Ì": "Ì", "î": "î", "Î": "Î", "ï": "ï", "Ï": "Ï", "ñ": "ñ", "Ñ": "Ñ", "ó": "ó", "Ó": "Ó", "ò": "ò", "Ò": "Ò", "ô": "ô", "Ô": "Ô", "ø": "ø", "Ø": "Ø", "õ": "õ", "Õ": "Õ", "ö": "ö", "Ö": "Ö", "ß": "ß", "ú": "ú", "Ú": "Ú", "ù": "ù", "Ù": "Ù", "û": "û", "Û": "Û", "ü": "ü", "Ü": "Ü", "ÿ": "ÿ", "\\":"\\\\"};
for i, j in hsconvert.items():
text = text.replace(i, j)
return text
print(secure("La Vie d'Adèle, chapitres 1 & 2"))
这是控制台输出:
>>> ================================ RESTART ================================
>>>
La Vie d\'Adèle, chapitres 1 & 2
['TV Movie', 'Video Game', 'TV Episode', 'TV Series', 'TV Series ', 'Short', 'TV Mini-Series']
>>> ================================ RESTART ================================
>>>
La Vie d\\'Adèle, chapitres 1 & 2
['TV Movie', 'Video Game', 'TV Episode', 'TV Series', 'TV Series ', 'Short', 'TV Mini-Series']
问题是与'
它有时返回字符\'
和有时\\'
。
我认为它来自词典中的最后一项,"\\":"\\\\"
但我不明白为什么每次运行时它的解释都不相同。
正如您在答案中推测的那样,问题在于字典上的迭代没有定义的顺序。
在字典上执行list(d.keys())会以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,请改用sorted(d.keys()))。
它没有明确说明,但对item()也是一样。
在这种情况下看到迭代之间的顺序变化时,我感到有些惊讶,但是在这种情况下,任意表示意味着未定义-任何顺序在技术上都是有效的。如果您想要一致的结果,建议您重新设计算法,使其完全不影响项目的排序;否则,首先对输出进行排序或使用OrderedDict至少可以解决一致性问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句