“用指定的分隔符拆分空字符串会返回['']” - 但我更喜欢[]

时间:2013-02-20 04:13:04

标签: python

我正在使用:

分割字符串
my_string.split(',')

有时字符串为空,返回['']

我的用例是这样接收空列表会更方便。在我的应用程序中,空字符串相当于没有项目。但是,['']是一个包含一个项''的列表。

有没有办法可以在没有条件或额外逻辑的情况下解决这个问题?我有一个字典键分配,如:

d = {
    'key': map(lambda x: x.strip(), my_string.split(',')),
}

保持这种方式很酷,都直接在关键任务中完成。

3 个答案:

答案 0 :(得分:3)

使用地图

,列表理解更快,更简洁
d = {
    'key': [x.strip() for x in my_string.split(',') if x],
}

此外,您的代码将在Python3中工作,其中map不再返回列表

以下是Matt在评论中提到的案例选项。选择最适合您目的的

>>> my_string = 'foo,,,bar'
>>> [x.strip() for x in my_string.split(',') if x]
['foo', 'bar']
>>> [x.strip() for x in my_string.split(',') if my_string]
['foo', '', '', 'bar']

编写第二种备选方案的更明确的方法是

>>> [x.strip() for x in my_string.split(',')] if my_string else []
['foo', '', '', 'bar']

答案 1 :(得分:1)

  

有没有办法可以在没有条件或额外逻辑的情况下解决这个问题?

没有。你怎么写代码传达你想要这样的行为?也就是说,要获得完全相同的行为,除了将''转换为[]

d = {
    'key': [x.strip() for x in my_string.split(',')] if my_string else []
}

答案 2 :(得分:0)

我建议使用filter()

filter( lambda x: len(x) > 0 , map(lambda x: x.strip(), my_string.split(',')) )