将 unicode 对象列表转换为字符串列表
Converting a list of unicode objects to a list of strings
我有一个 unicode 对象列表 names
,我正在尝试生成一个新列表 parsed_names
,以便将具有单个名称的对象转换为字符串,并将具有列表的对象转换为名称转换为字符串列表:
names = [u'Johnny', u'["Tamir", "Josh"]', u'Brad']
parsed_names = ['Johnny', ['Tamir', 'Josh'], 'Brad']
以下代码可以解决问题,但我宁愿不捕获错误 (ValueError: malformed string
) 以防出现其他问题:
import ast
names = [u'Johnny', u'["Tamir", "Josh"]', u'Brad']
parsed_names = []
for n in names:
try:
parsed_names.append(ast.literal_eval(name))
except ValueError:
parsed_names.append(str(name))
print parsed_names
# ['Johnny', ['Tamir', 'Josh'], 'Brad']
注意:我的最终目标是生成一个扁平化列表 (['Johnny', 'Tamir', 'Josh', 'Brad']
),但我已经有了相关代码,我认为必须先执行此步骤。
您需要对子列表使用 extend
而不是 append
:
import ast
parsed_names = []
for n in names:
try:
sub_list = ast.literal_eval(n)
parsed_names.extend(sub_list)
except ValueError:
parsed_names.append(str(n))
输出:
>>> parsed_names
['Johnny', 'Tamir', 'Josh', 'Brad']
如果不想使用try..except
,可以尝试以下方法:
temp = [ast.literal_eval(n) if '[' in n else str(n) for n in names]
# ['Johnny', ['Tamir', 'Josh'], 'Brad']
res = []
for item in temp:
if isinstance(item, list):
res.extend(item)
else:
res.append(item)
我有一个 unicode 对象列表 names
,我正在尝试生成一个新列表 parsed_names
,以便将具有单个名称的对象转换为字符串,并将具有列表的对象转换为名称转换为字符串列表:
names = [u'Johnny', u'["Tamir", "Josh"]', u'Brad']
parsed_names = ['Johnny', ['Tamir', 'Josh'], 'Brad']
以下代码可以解决问题,但我宁愿不捕获错误 (ValueError: malformed string
) 以防出现其他问题:
import ast
names = [u'Johnny', u'["Tamir", "Josh"]', u'Brad']
parsed_names = []
for n in names:
try:
parsed_names.append(ast.literal_eval(name))
except ValueError:
parsed_names.append(str(name))
print parsed_names
# ['Johnny', ['Tamir', 'Josh'], 'Brad']
注意:我的最终目标是生成一个扁平化列表 (['Johnny', 'Tamir', 'Josh', 'Brad']
),但我已经有了相关代码,我认为必须先执行此步骤。
您需要对子列表使用 extend
而不是 append
:
import ast
parsed_names = []
for n in names:
try:
sub_list = ast.literal_eval(n)
parsed_names.extend(sub_list)
except ValueError:
parsed_names.append(str(n))
输出:
>>> parsed_names
['Johnny', 'Tamir', 'Josh', 'Brad']
如果不想使用try..except
,可以尝试以下方法:
temp = [ast.literal_eval(n) if '[' in n else str(n) for n in names]
# ['Johnny', ['Tamir', 'Josh'], 'Brad']
res = []
for item in temp:
if isinstance(item, list):
res.extend(item)
else:
res.append(item)