如何檢查字典(實際上是類似字典的對象)是否具有給定的所有鍵鍵(複數)?檢查字典是否有多個鍵
到目前爲止,我已經使用:
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的方式?
如何檢查字典(實際上是類似字典的對象)是否具有給定的所有鍵鍵(複數)?檢查字典是否有多個鍵
到目前爲止,我已經使用:
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的方式?
使用內置函數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
看起來很酷。你知道這種方法的性能如何嗎?另外,你在'all'的參數中稱爲list-comprehension類型的東西 - 我以前從未見過這種語法。 – rvighne
這是一個生成器表達式。它根據請求產生元素,併產生所有短路,並在知道它們後立即返回值。 –
所以,它第一次看到一個'False'值,即該鍵不在'd'中,它會短路並返回'False',就像你的函數一樣。 'all'的實現在我引用的Doc頁面上給出。 –
可以只使用關鍵字 「在」 例如: d = { 'A':1, 'B':2, 'C':3} 如果 'd' 在d: 打印 '是' 其他: 打印 '不'
我想測試*多個*鍵。這隻測試*一個*。 – rvighne
你也可以嘗試這樣的:
>>> names = {
'a' : 11,
'b' : 10,
'c' : 14,
'd': 7
}
>>> keys = ('a', 'b')
>>> set(keys).issubset(names)
True
根據'timeit',這是迄今爲止最快的方法〜2x。還有更具表現力的IMO。 – rvighne
@rvighne: - 是的,這是真的! –
@rvighne:你能發佈你的結果嗎?我在時間上沒有看到太多的差異。這種方式更快,但不是因子2. –
爲什麼downvote? – rvighne