我有一个由Python中的字符串和列表组成的字典.
{'stringhere':[a1,a2,a3], 'anotherstringhere':[a2,a4,a5],....}
Run Code Online (Sandbox Code Playgroud)
问题是,某些字符串被写为特殊字符,因为重音,例如,'ol\xe9'
而不是'olé'
.
是否可以在orded中更改这些字符串以实现expected('olé'
)结果?提前致谢.
假设这是Python 3,'ol\xe9'
并且'olé'
只是完全相同字符串的两个不同表示.你可以很容易地看到这个:
>>> 'ol\xe9' == 'olé'
True
Run Code Online (Sandbox Code Playgroud)
如果它是Python 2,'olé'
则根本不是有效的字符串.u'olé'
是,并且'ol\xe9'
是将该Unicode字符串编码为Latin-1(以及各种其他字符集)中的字节.*
但无论哪种方式,你最可能的问题不是你要问的问题,而只是如何打印出集合中每个元素str
而不是repr
集合的问题.例如,在Python 2中:
>>> print u'olé'
olé
>>> print [u'olé', u'olé']
[u'ol\xe9', u'ol\xe9']
Run Code Online (Sandbox Code Playgroud)
如果这是你的问题,这个网站上有很多重复,但简短的版本是你必须手动完成:
>>> s = [u'olé', u'olé']
>>> print u', '.join(s)
olé, olé
Run Code Online (Sandbox Code Playgroud)
当然,它没有括号或引号(或u
前缀).那是因为那些是列表本身表示的一部分,就像内部字符串的非用户友好表示一样.如果你想混合和匹配不同的位,你可以; 你只需要明确地做.例如:
>>> print u'[{}]'.format(u', '.join(u"'{}'".format(item) for item in s))
['olé', 'olé']
Run Code Online (Sandbox Code Playgroud)
当然,如果你试图打印一个值为字符串列表的字典,这会变得更加复杂,所以你可能想要编写一些包装器函数来帮助你而不是编写三重嵌套表达式......
*实际上,这并不完全正确.实际上,'olé'
是一个有效的字符串文字,只要源文件编码的字节可以通过标题注释中指定的源文件编码进行解码.但它可能不是一个非常有用的.除非你的文本编辑器,编码声明,decode
代码中的显式调用或控制台的编码都完全匹配,否则你会感到困惑,并最终在所有地方使用mojibake.所以最好完全避免这种情况; 要么使用Unicode文字,要么使用带有显式字节序列的字节文字进行您期望的编码.