0

次を使用して文字列を分割しています:

my_string.split(',')

文字列が空である場合があり、 が返されます['']

私のユースケースでは、空のリストを受け取る方が便利です。私のアプリケーションでは、空の文字列はアイテムがないことと同じです。['']ただし、 は 1 つの項目のリスト''です。

条件付きまたは追加のロジックなしでこれを回避する方法はありますか? 次のような辞書キーの割り当てがあります。

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

このようにして、すべてキーの割り当てに直接配置するのはクールです。

4

3 に答える 3

3

リスト内包表記は、map を使用するよりも高速で簡潔です

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

mapさらに、リストを返さないPython3でコードが機能します

コメントでマットが言及したケースのオプションをいくつか示します。目的に最も適したものを選択してください

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

2 番目の選択肢をより明確に記述する方法は、次のとおりです。

>>> [x.strip() for x in my_string.split(',')] if my_string else []
['foo', '', '', 'bar']
于 2013-02-20T04:15:49.837 に答える
1

条件付きまたは追加のロジックなしでこれを回避する方法はありますか?

いいえ。そのような動作が必要であることを伝えるコードを他にどのように記述しますか? そうは言っても、次のようになることを除いて、まったく同等の動作を得る''には[]

d = {
    'key': [x.strip() for x in my_string.split(',')] if my_string else []
}
于 2013-02-20T04:20:31.453 に答える
0

filter() の使用をお勧めします

filter( lambda x: len(x) > 0 , map(lambda x: x.strip(), my_string.split(',')) )
于 2013-02-20T04:15:48.107 に答える