有沒有一種很好的方法來測試字典是否包含多個密鑰?如何測試字典是否包含特定密鑰
短版:
d = {}
if 'a' in d and 'b' in d and 'c' in d:
pass #do something
感謝。
編輯:我只能用-.-的python2.4
有沒有一種很好的方法來測試字典是否包含多個密鑰?如何測試字典是否包含特定密鑰
短版:
d = {}
if 'a' in d and 'b' in d and 'c' in d:
pass #do something
感謝。
編輯:我只能用-.-的python2.4
您可以使用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
if all(test in d for test in ('a','b','c')):
# do something
能使用包裹在一個嘗試的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'
但其實我更喜歡保羅·麥圭爾的解決方案
在Python3你可以寫
set("abc")<=d.keys()
在Python2.7你可以寫
d.viewkeys()>=set("abc")
當然如果鍵不是單個字符,您可以用替代
會很好,但我只能在我們的prod服務器上使用python 2.4。 – AkaBkn 2010-08-05 14:13:04
+1爲完整性,以防某些人稍後在此處查看並正在使用python 2.7+ – 2010-08-05 14:33:56
在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
設置警告字符串可能會有所不同,當然,因爲集,像字典,沒有訂單的概念)。
set(sub_dict).issubset(parent_dict)似乎也可以工作,對我來說更簡單。但感謝指針:) – trojjer 2013-07-31 09:30:22