2017-02-06 2 views
-1

ラムダ内の分割後にキー値を削除する方法はありますか?分割後にラムダを追加するには?

map(lambda s: [p.strip() for p in s.split(':')], l) 

デモ私はではなく、リストの内包を使用

>>> l = [" key1 :  value1 ", " key2 :  value2 ", " key3 "] 
>>> map(lambda s: [p.strip() for p in s.split(':')], l) 
[['key1', 'value1'], ['key2', 'value2'], ['key3']] 

:あなたが分割後の各要素を取り除くことができ

[[' key1 ', '  value1 '], [' key2 ', '  value2 '], [' key3 ']] 
+0

「分割」の前に「ストリップ」を呼び出すことはできませんか? – vaultah

+0

なぜ 'd'を' {} 'として初期化するのですか? 'map'はJavaの' Map'やPython 'dict'という意味で"マップ "を生成しません。 –

+0

'dict'が必要な場合は、結果を' dict'関数、つまり 'dict(map(...))'やdict( '[...] ...)' 'に渡すことができます。 'key3'には値がありません。 –

答えて

1

l = [" key1 :  value1 ", " key2 :  value2 ", " key3 "] 
    d = {} 
    d = dict(map(lambda s : s.split(':'), l)) 
    print d 

    # print d['key2'] should work 

結果は、スペースを持っていますmap()そこに電話する。それは少し目が簡単です。

あなたも、ネストされたリストの内包全部を行うことができます。あなたは辞書を生成したい場合

[[p.strip() for p in s.split(':')] for s in l] 

さて、あなたはキーと値のペアではありません任意のエントリをフィルタリングする必要があります:

​​
+0

分割後にしたいです。 – Victor

+0

@Victor:しかし、あなたの入力例は': 'の周りに空白がありません。 *これで必要な出力を正確に*得ることができます。 –

+0

oopsはquenstionを更新しました – Victor

0

このリストからdictを作成したようです。 mapより、名前がJava Mapと似ていますが、dictは生成されません。代わりにmapの結果またはリストの理解をdict組み込み関数に入力できます。ただし、key3には値がないため、以前に要素をフィルタリングする必要があります。

>>> l = [" key1 :  value1 ", " key2 :  value2 ", " key3 "] 
>>> pairs = [[p.strip() for p in s.split(':')] for s in l] 
>>> dict(p for p in pairs if len(p) == 2) 
{'key2': 'value2', 'key1': 'value1'} 

または使用str.partition

>>> triplets = [[p.strip() for p in s.partition(":")] for s in l] 
>>> dict((p[0], p[2]) for p in triplets) 
{'key3': '', 'key2': 'value2', 'key1': 'value1'} 

また、dictの内包表記を使用し、必要に応じて欠損値のデフォルトを提供することができます。

>>> {head: tail or "default" for head, _, tail in triplets} 
{'key3': 'default', 'key2': 'value2', 'key1': 'value1'} 
関連する問題