我有一个列表,其中包含以列表形式的unicode字符串。
my_list = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
我想要一个可以迭代的列表,例如;
name_list = [James, Williams, Kevin, Parker, Alex, Emma, Katie, Annie]
在给定here的情况下,我尝试了几种可能的解决方案,但是在我的情况下,它们都不起作用。
# Tried
name_list = name_list.encode('ascii', 'ignore').decode('utf-8')
#Gives unicode return type
# Tried
ast.literal_eval(name_list)
#Gives me invalid token error
答案 0 :(得分:2)
首先,列表没有encode
方法,您必须对列表中的项目应用任何字符串方法。
第二,如果您要对字符串进行规范化,则可以使用Python normalize
库中的unicodedata
函数,阅读更多here,这会删除不需要的字符{{1} },将帮助您规范化其他字符。
然后,使用列表理解来构建列表,而不是使用通常不安全的'\xa0'
:
eval
在您期望的输出中,它们实际上是一个变量列表,除非事先声明,否则会给您带来错误。
答案 1 :(得分:0)
import unicodedata
lst = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
lst = unicodedata.normalize("NFKD", lst[0])
lst2 = lst[1:-1].split(", ") # remove open and close brackets
print(lst2)
输出将是:
["James", "Williams", "Kevin", "Parker", "Alex", "Emma", "Katie ", "Annie"]
如果要删除所有前导/尾随空格:
lst3 = [i.strip() for i in lst2]
print(lst3)
输出将是:
["James", "Williams", "Kevin", "Parker", "Alex", "Emma", "Katie", "Annie"]
答案 2 :(得分:0)
这是正则表达式的一个很好的应用程序:
import unicodedata
li = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
inner_li = unicodedata.normalize("NFKD", li[0]) #<--- notice the list selection
#get only part of the string you want to convert into a list
new_li = [i.strip() for i in inner_li[1:-1].split(',')]
new_li
>> ['James', 'Williams', 'Kevin', 'Parker', 'Alex', 'Emma', 'Katie', 'Annie']