2014-07-23 190 views
-1

如何檢查字典(實際上是類似字典的對象)是否具有給定的所有鍵(複數)?檢查字典是否有多個鍵

到目前爲止,我已經使用:

d = { 'a': 1, 'b': 2, 'c': 3 } 
keys = ('a', 'b') 

def has_keys(d, keys): 
    for key in keys: 
     if not key in d: 
      return False 
    return True 

是否有這樣做的更優雅和Python的方式?

+2

爲什麼downvote? – rvighne

回答

10

使用內置函數all()

>>> d = { 'a': 1, 'b': 2, 'c': 3 } 
>>> keys = ('a', 'b') 
>>> all(elem in d for elem in keys) 
True 
>>> keys = ('a', 'b', 'd') 
>>> all(elem in d for elem in keys) 
False 
+0

看起來很酷。你知道這種方法的性能如何嗎?另外,你在'all'的參數中稱爲list-comprehension類型的東西 - 我以前從未見過這種語法。 – rvighne

+3

這是一個生成器表達式。它根據請求產生元素,併產生所有短路,並在知道它們後立即返回值。 –

+1

所以,它第一次看到一個'False'值,即該鍵不在'd'中,它會短路並返回'False',就像你的函數一樣。 'all'的實現在我引用的Doc頁面上給出。 –

-1

可以只使用關鍵字 「在」 例如: d = { 'A':1, 'B':2, 'C':3} 如果 'd' 在d: 打印 '是' 其他: 打印 '不'

+0

我想測試*多個*鍵。這隻測試*一個*。 – rvighne

1

你也可以嘗試這樣的:

>>> names = { 
     'a' : 11, 
     'b' : 10, 
     'c' : 14, 
     'd': 7 
} 
>>> keys = ('a', 'b') 
>>> set(keys).issubset(names) 
True 
+4

根據'timeit',這是迄今爲止最快的方法〜2x。還有更具表現力的IMO。 – rvighne

+2

@rvighne: - 是的,這是真的! –

+0

@rvighne:你能發佈你的結果嗎?我在時間上沒有看到太多的差異。這種方式更快,但不是因子2. –

相關問題