重点字符串

时间:2013-08-27 22:01:03

标签: python string

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

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

问题在于,某些字符串被写为特殊字符,因为重点,例如'ol\xe9'而不是'olé'

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

2 个答案:

答案 0 :(得分: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é']

当然,如果你试图打印一个值为字符串列表的字典,这会变得更加复杂,所以你可能想要编写一些包装器函数来帮助你而不是编写三重嵌套表达式......


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

答案 1 :(得分:0)

# -*- coding: utf-8 -*-
a = {'olé' : 1}
for i in a:
    print i, a[i]

Output: olé 1

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