[英]I need to iterate through a dictionary and see if keys are in a given list
給定字典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]
在迭代dict
時,您不想刪除任何dict
元素。 同樣,最好還是通過lst
而不是字典d
進行迭代,以利用其恆定時間查找的優勢。 您現在的操作方式是遍歷dict,然后每次遍歷列表。 這不理想。 嘗試類似的東西,
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])
在迭代列表/字典時將其刪除會導致您跳過項目。 如果在迭代時更改大小,則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}
for i in lst:
if i in d:
del d[i]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.