2010-08-05 51 views

回答

20

您可以使用set.issubset(...),像這樣:

>>> d = {'a': 1, 'b': 2, 'c': 3} 
>>> set(['a', 'b']).issubset(d) 
True 
>>> set(['a', 'x']).issubset(d) 
False 

Python 3中已經介紹了已經被移植到Python 2.7的一組文字語法,所以這幾天上面可以寫爲:

>>> d = {'a': 1, 'b': 2, 'c': 3} 
>>> {'a', 'b'}.issubset(d) 
True 
>>> {'a', 'x'}.issubset(d) 
False 
+0

set(sub_dict).issubset(parent_dict)似乎也可以工作,對我來說更簡單。但感謝指針:) – trojjer 2013-07-31 09:30:22

20
if all(test in d for test in ('a','b','c')): 
    # do something 
1

能使用包裹在一個嘗試的itemgetter /除外。

>>> from operator import itemgetter 
>>> d = dict(a=1,b=2,c=3,d=4) 
>>> e = dict(a=1,b=2,c=3,e=4) 
>>> getter=itemgetter('a','b','c','d') 
>>> getter(d) 
(1, 2, 3, 4) 
>>> getter(e) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'd' 

但其實我更喜歡保羅·麥圭爾的解決方案

5

在Python3你可以寫

set("abc")<=d.keys() 

在Python2.7你可以寫

d.viewkeys()>=set("abc") 

當然如果鍵不是單個字符,您可以用替代

+0

會很好,但我只能在我們的prod服務器上使用python 2.4。 – AkaBkn 2010-08-05 14:13:04

+0

+1爲完整性,以防某些人稍後在此處查看並正在使用python 2.7+ – 2010-08-05 14:33:56

1

在2.4中,我總是使用set操作來達到這個目的。如果它是值得的警告(或其他種類的味精或異常的)時,一些預期項丟失,尤其是我做的:

missing = set(d).difference(('a', 'b', 'c')) 
if missing: 
    logging.warn("Missing keys: %s", ', '.join(sorted(missing))) 
else: 
    ... 

更換logging.warn調用適當的,當然(也許只是logging.info或甚至logging.debug,也許logging.error,也許是一個例外)。 (我喜歡可靠的,可重複的錯誤消息),但也有助於測試(當我模擬logging.warn - 或其他任何 - 在測試中,很高興能夠期望一個特定的字符串,如果我沒有排序missing設置警告字符串可能會有所不同,當然,因爲集,像字典,沒有訂單的概念)。

相關問題