簡體   English   中英

從數組值中過濾字典

[英]Filter dictionary from array values

我有一個字典,其值如下:

dictionary = {(10,9): 1, (44,11): 2, (1,1): 99}

基本上我的鍵是整數對,每個鍵的值只是整數。

我有一個存儲一組鍵的數組:

array = [(1,1), (5,19), (58,7)]

我想過濾我的字典,只包含哪些鍵存儲在數組中的元素。 在我的情況下,過濾字典后,我會得到以下內容:

dictionary = {(1,1): 99}

因為存儲在數組中的字典唯一的鍵是(1,1)

最有效的方法是什么?

你可以這樣做:

dictionary = {(10,9): 1, (44,11): 2, (1,1): 99}
array = [(1,1), (5,19), (58,7)]

result = { k:v for k, v in dictionary.items() if k in array}

產量

{(1, 1): 99}

甚至更快,將列表轉換為集合

s = set(array)
result = {k: v for k, v in dictionary.items() if k in s}

您可以找到字典鍵和數組元組的集合交集,然后在字典理解中獲取新值。 這將降低搜索數組中每個鍵的復雜性:

dictionary = {(10,9): 1, (44,11): 2, (1,1): 99}
array = [(1,1), (5,19), (58,7)]

>>> {i:dictionary[i] for i in set(dictionary.keys()).intersection(array)}
{(1, 1): 99}

這是一個詞典理解:

>>> dictionary = {(10,9): 1, (44,11): 2, (1,1): 99}
>>> lst = [(1,1), (5,19), (58,7)]    
>>> d = {k:v for k,v in dictionary.items() if k in lst}
>>> {(1, 1): 99}

我將array重命名為lst因為它是一個list 我們不應該將列表與numpy數組, array.arraybytearray類型混淆。

如果你對理解還不熟悉,你也可以寫一個傳統的for循環:

>>> d = {}
>>> for key in dictionary:
...:    if key in lst:
...:        d[key] = dictionary[key]
...:        
>>> d
>>> {(1, 1): 99}

怎么樣:

res = {i: dictionary[i] for i in array if i in dictionary}

這在O(n)中進行 ,其中narray的項數,不需要任何其他數據結構。

對於你的dictionaryarray ,這給了我們:

{(1, 1): 99}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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