2016-08-16 8 views
2

辞書の値は、各用語の最後に'|x'となるはずの文字列です。いくつかの文字列には多くの用語が含まれており、それらはspaceで区切られています。Python辞書が値を置き換えてdictに保存

'|x'のない値で用語を削除しようとしていますが、辞書が新しい値を保存していません。

d={'food': u'burger|x fries|x soda pie|x', 'transport': u'bus|x', 'animal': u'cat|x'} 

for k,v in d.iteritems(): 
    for t in v.split(' '): 
     if '|x' in v: 
      v=v.replace(t,'') 

出力:私はしたい

d 
{'food': u'burger|x fries|x soda pie|x', 'animal': u'cat|x', 'transport': u'bus|x'} 

が出力:

{'food': u'burger|x fries|x pie|x', 'animal': u'cat|x', 'transport': u'bus|x'} 

値が置き換えられますdidntのはなぜ?

+0

あなたはどのような出力をしたいですか、私はあなたを理解していないので、質問。 –

+0

私の編集を参照してください – jxn

+1

あなたはそれを交換したことがないので、値は置き換えられませんでした。 'v = v.replace(...)'の後に 'd [k] = v'が必要です。 – kindall

答えて

5

新しい文字列を作成しているだけで、dictの値を更新していません。

かわりに、辞書内包表記を使用してそれらの項目を削除することができます。この文脈でsplit(' ')を置き換えることができます

d = {'food': u'burger|x fries|x soda pie|x', 'transport': u'bus|x', 'animal': u'cat|x'} 
d = {k: ' '.join(i for i in v.split() if i.endswith('|x')) for k, v in d.iteritems()} 
print d 
# {'food': u'burger|x fries|x pie|x', 'transport': u'bus|x', 'animal': u'cat|x'} 

split()こと。

+1

小文字 - OPがPython 2( 'iteritems()'の呼び出しの可能性が高い)を使用している場合は、ここで 'iteritems()'を使用する方がよいでしょう。 – Karin

+0

@カリンええ、それを指摘してくれてありがとう。 –

+1

もう一つの短所 - 各用語は '| x'で終わらなければならないので、' '| x'の代わりに 'i.endswith( '| x')'を使ってください。 – mhawke

1

入力

d = {'food': u'burger|x fries|x soda pie|x', 'transport': u'bus|x', 'animal': u'cat|x'} 

コード

for (i, j) in d.iteritems(): 
    x = j.split() 
    for k in x: 
     if not k.endswith('|x'):    
      x.remove(k) 
    d[i] = " ".join(x) 

出力

d = {'food': u'burger|x fries|x pie|x', 'transport': u'bus|x', 'animal': u'cat|x'} 
+0

予期した結果を得るために、辞書の値を更新していませんでした。 – d3r1ck

+0

このソリューションは、基本的に理解しやすいものです。より高度にするために、それを微調整することができます。 – d3r1ck

0

辞書理解する代わりに、場所辞書を更新することです。

d = {'food': u'burger|x fries|x soda pie|x', 'transport': u'bus|x', 'animal': u'cat|x'} 

for k in d: 
    terms = d[k].split() 
    d[k] = ' '.join(term for term in terms if term.endswith('|x')) 

または1つの操作にそれをshoehorning:dictの内包表記が第二の辞書を生成しますので、これは非常に大規模な辞書のためのより良いかもしれません

for k in d: 
    d[k] = ' '.join(term for term in d[k].split() if term.endswith('|x')) 
関連する問題