2013-07-19 38 views
0

給定字典d和列表lst,從字典中刪除其鍵爲lst元素的所有元素。列表中不是字典鍵的任何元素都應添加到與變量not_found關聯的新集中。例如,給定字典{1:2,3:4,5:6,7:8}和列表[1,6,7],結果字典將是{3:4,5:6},而設置NOT_FOUND將包含6我需要遍歷字典並查看鍵是否在給定列表中

這是我的代碼如下所示:

not_found =() 
for i in d: 
if d[i] in lst: 
    not_found.append(d[i]) 
      del d[i] 

回答

2

從列表/字典中刪除,同時遍歷它會導致你跳過項目。 dict應該抱怨如果大小改變,而你迭代它。

通常最好來創建你需要保持

在你的情況下,項目是內特新字典遍歷lst代替

>>> d = {1:2, 3:4, 5:6, 7:8} 
>>> lst = [1, 6, 7] 
>>> not_found = {k for k in lst if k not in d} 
>>> for k in lst: 
... if k in d: 
...  del d[k] 
>>> d 
{3: 4, 5: 6, 7: 8} 
3

你不想刪除的任何元素dict當你迭代它。此外,您最好重複lst而不是字典d以利用其恆定時間查找。你現在這樣做的方式是迭代字典,然後迭代列表,每次。這並不理想。嘗試類似,

not_found = set() 
for e in lst: 
    if e in d: 
     del d[e] 
    else: 
     not_found.add(e) 

print d   # {3: 4, 5: 6} 
print not_found # set([6])