2014-10-20 128 views
2

我想檢查給定字典中是否至少有一個字符在另一個字典中可用。 我已經知道如何檢查「必須」 -keys這樣的:檢查字典中是否至少包含一個字典

valid_data = [] 
needed_keys = (key1, key2) 

for d in data: 
    if not all(key in d for key in needed_keys): 
     continue # ignore invalid object 

    valid_data.append(d) 

數據是在這裏類型的字典列表。通過此代碼,只有包含key1和key2的項目纔會附加到valid_data。

有什麼樣:

if not any(key in d for key in needed_keys) 

也成功如果從所需的密鑰的任何鍵可用?

+3

你有沒有嘗試過你的代碼 - 函數「any」存在,並做你所需要的。 – 2014-10-20 14:01:45

回答

6

使用set intersections

needed_keys = {key1, key2} 

for d in data: 
    if needed_keys.intersection(d): 
     valid_data.append(d) 

如果沒有密鑰在needed_keys集和詞典之間共享的交叉點僅是​​空的。

請注意,您的any(...)函數也可以工作,只是不如集交集選項有效;也許你沒有意識到any() function確實存在?

+0

同意交叉點。好和容易 – Anzel 2014-10-20 14:03:36

+0

謝謝,那工作。 – Igle 2014-10-20 14:10:36

1

比方說你的數據是這樣的

>>> d1, d2 = {"a" : 1, "b" : 2, "c" : 3}, {"b" : 1, "c" : 2, "d" : 3} 

首先,定義所需的密鑰爲一組。比方說,

>>> needed_keys = {"a", "b", "d"} 

現在,你可以簡單地檢查字典鍵和needed_keys都有共同ATLEAST一個項目,與set.isdisjoint設置操作,這樣

>>> [item for item in (d1, d2) if not needed_keys.isdisjoint(item)] 

這將是非常有效的,因爲如果它找到一個單一的公共元素,它將立即返回。

相關問題