簡體   English   中英

我需要遍歷字典,看看鍵是否在給定列表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM