从Unicode列表列表中获取适当的列表

时间:2018-11-27 07:21:34

标签: python list unicode unicode-escapes

我有一个列表,其中包含以列表形式的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

3 个答案:

答案 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']