2012-06-12 19 views
50

存在我的字典,這些看起來像這樣:Python的檢查,如果鍵列表字典

grades = { 
     'alex' : 11, 
     'bob' : 10, 
     'john' : 14, 
     'peter': 7 
     } 

和名稱students = ('alex', 'john')

我需要檢查在students所有名稱作爲存在的列表鍵字grades字典。

grades可以有更多的名字,但在students所有名稱應該是grades

必須有做一個簡單的方法,但我還是新的蟒蛇,不能弄明白。試過if students in grades,沒有工作。

在實際情況下,列表會更大。

+0

可能的重複[如何檢查多個鍵在一個字典中的單個傳遞?](https://stackoverflow.com/questions/1285911/how-do-i-check-that-multiple-keys - 在一個字典中的單通) –

回答

107

使用all()

if all(name in grades for name in students): 
    # whatever 
+25

@chaft:即使是示例代碼[應該是正確的](http://sscce.org/#co)。 –

+1

@SvenMarnach:如果我可以多次投你的評論,我會。 – MattH

+0

太棒了!如果條件爲False,可以使用任何快捷方式獲取dic中缺少的元素? – guival

17
>>> grades = { 
     'alex' : 11, 
     'bob' : 10, 
     'john' : 14, 
     'peter': 7 
} 
>>> names = ('alex', 'john') 
>>> set(names).issubset(grades) 
True 
>>> names = ('ben', 'tom') 
>>> set(names).issubset(grades) 
False 

調用它class是無效的,所以我把它改成names

+0

與「all()」相比,這不能簡捷。它總是O(m + n),其中m和n分別是'names'和'grades'的大小。使用'all()'將會是O(m),並且可能會快捷。 –

+3

@SvenMarnach對,我只是把它留在這裏,因爲這是另一種方法,但我同意你的是最好的。 – jamylak

+0

絕對不要在這裏!無論如何,這是一個有趣的方法。 –