2016-06-16 6 views
-1

私は辞書(d2)を持っており、条件を満たすキーだけを含む新しい辞書(new_dict)を作成しなければなりません。Pythonで辞書のキーを正しく更新していますか?

これは私のコードです:

d2 = dict((y,x) for x,y in d.iteritems()) 

new_dict={} 
for name in list: 
    for keyx in d2: 
     if name in keyx:  
      new_dict=dict((keyx,d2[keyx]) for v in d2.itervalues()) 
      print new_dict  

しかし、私はnew_dictを印刷するとき、私は、各キーのnew_dictを得る:

{key:value} 
{key2:value2} 
ecc.. 

独自の辞書を入手するにはどうすればよいです?

+0

があなたの代わりに、既存の辞書を変異したことがありますか? –

答えて

3

例を挙げて説明します。

>>> f={'c':1,'d':2,'e':3} 
>>> l=['c','d'] 
>>> {i:f[i] for i in f if any([k in i for k in l])} 
{'c': 1, 'd': 2} 

ご使用のケースでは、単純になります。

listのような変数名を使用してから リフレインを喜ばせる、と述べ
new_dict = {i:d2[i] for i in d2 if any([k in i for k in list])} 

。また

、代わりの

d2 = dict((y,x) for x,y in d.iteritems()) 

は、あなただけのようにちょうどあなたのコードを更新

d2 = {y:x for x,y in d.iteritems()} 
+0

ありがとう! (あなたが正しいです、私はここの例としてリストを使用しました;)) – Alice

1

を行うことができます -

d2 = dict((y,x) for x,y in d.iteritems()) 

new_dict={} 
for name in list: 
    for keyx in d2: 
     if name in keyx:  
      new_dict[keyx] = d2[keyx] 
      print new_dict 

は、何が間違ってやっていたが、再び辞書を作っていると、ループの中で再び...

あなたはこれを書くとき

-

new_dict[keyx] = dict('key' = 'something') 

新しい辞書が作成され、それはあなたの問題の理由です... あなたは...他の回答のように、より神託の方法でそれを解決することができます

1

毎回新しい辞書を作成するのではなく、見つけた新しいアイテムでnew_dictを更新する必要があります。ここでは例です:

d2 = {'a': 1, 'b': 2, 'ab': 3} 
l = ['a'] 
new_dict = dict([(k, v) for k, v in d2.items() if any(x in k for x in l)]) 
print new_dict 

この意志出力:

{'a': 1, 'ab': 3} 
関連する問題