2017-09-05 25 views
0

から文字列に要素を追加するには、リスト内包表記を使用する:次のように私は辞書を持っている参照辞書

s = {'lorem': set(['test1', 'test2'])} 

やテキストファイルを次のように

data = "Lorem ipsum dolor sit amet consectetur adipiscing elit" 

次のように私は、スクリプトを書きました

::次のようなリストを出力

[[word, s[word]] if word in s else word for word in data.lower().split()] 

私は、出力に次のリストは、上記のスクリプトを書き換えることができますどのように10

[['lorem', set(['test1', 'test2'])], 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit'] 

['lorem', 'test1', 'test2', 'ipsum', 'dolor', 'sit', 'amet', 'onsectetur', 'adipscing', 'elit'] 
+0

@TheoretiCAL - はい、絶対に維持したいと元の "lorem" –

+0

それから、 "置き換える"というよりむしろ単語を追加します。誤解を招くように説明を修正してください。 – alfasin

+0

ok @alfasin - これを反映するように更新されます。 –

答えて

4

することはできリスト内包の右側にセットアンラップ。辞書でdict.get代わりの項目の封じ込めのためのテストを使用します。

lst = [w for word in data.lower().split() for w in [word] + list(s.get(word,()))] 
print(lst) 
# ['lorem', 'test1', 'test2', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit'] 
+1

Thats cool!私はあなたがそうすることができたと気付かなかった...素晴らしい、とてもエレガントな...ありがとう! –

0

あなたがこの試すことができます:

from itertools import chain 
s = {'lorem': set(['test1', 'test2'])} 

data = "Lorem ipsum dolor sit amet consectetur adipiscing elit" 

new_data = [[i, list(s[i.lower()])] if i.lower() in s else [i] for i in data.split()] 
final_data = list(chain.from_iterable([list(chain.from_iterable([[c] if not isinstance(c, list) else c for c in i])) if any(isinstance(b, list) for b in i) else i for i in new_data])) 

出力:

['Lorem', 'test1', 'test2', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit'] 
関連する問題