2016-06-16 37 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} 

對於您的使用情況,它只是簡單的。

new_dict = {i:d2[i] for i in d2 if any([k in i for k in list])} 

也就是說,使用像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') 

一個新的字典創建,那就是你的問題的原因...... 您可以更Python的方式解決它在其他的答案...

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}