0

我有一个由 Python 中的字符串和列表组成的字典。

{'stringhere':[a1,a2,a3], 'anotherstringhere':[a2,a4,a5],....} 

问题是一些字符串被写成特殊字符,因为重音,例如,'ol\xe9'而不是'olé'

是否可以更改这些字符串以达到预期的 ( 'olé') 结果?提前致谢。

4

2 回答 2

5

假设这是 Python 3,'ol\xe9'并且'olé'只是完全相同字符串的两种不同表示形式。你可以很容易地看到这一点:

>>> 'ol\xe9' == 'olé'
True

如果它是 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']

如果这是你的问题,这个网站上有很多重复,但简短的版本是你必须手动完成:

>>> s = [u'olé', u'olé']
>>> print u', '.join(s)
olé, olé

当然,它没有括号或引号(或u前缀)。那是因为它们是列表本身表示的一部分,就像内部字符串的非用户友好表示一样。如果你想混合和匹配不同的位,你可以;你只需要明确地做到这一点。例如:

>>> print u'[{}]'.format(u', '.join(u"'{}'".format(item) for item in s))
['olé', 'olé']

当然,如果您尝试打印其值是字符串列表的字典,这会变得更加复杂,因此您可能需要编写一些包装函数来帮助您,而不是编写三重嵌套表达式……</p >


* 实际上,这并不完全正确。事实上,'olé'它是一个有效的字符串文字,只要您的源文件编码的字节可以由您在标题注释中指定的源文件编码解码。但它可能不是一个非常有用的。除非您的文本编辑器、编码声明以及代码中的显式decode调用或控制台的编码都完全匹配,否则您会感到困惑并最终到处都是 mojibake。所以最好完全避免这种情况;要么使用 Unicode 文字,要么使用带有显式字节序列的字节文字来进行您期望的编码。

于 2013-08-27T22:16:11.133 回答
0
# -*- coding: utf-8 -*-
a = {'olé' : 1}
for i in a:
    print i, a[i]

Output: olé 1

那你需要什么,请解释一下?

于 2013-08-27T22:13:14.303 回答