2010-08-05 22 views

cevap

20

Çok gibi set.issubset(...) kullanabilirsiniz:

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

Python 3 Python 2.7 için backported edilmiş bir dizi değişmez sözdizimini tanıttı, bu nedenle bu gün yukarıda yazılı edilebilir:

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

setini (sub_dict) kullanıyorsa .issubset (parent_dict) da çalışıyor gibi görünüyor ve benim için daha basit. Ama işaretçi için teşekkürler :) – trojjer

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

kullanabilirsiniz.

>>> 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' 

Ama aslında ben anahtarları ise

Python2.7 yılında
set("abc")<=d.keys() 

elbette

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

yazabilirsiniz yazabilirsiniz Python3 yılında

5

Paul McGuire çözümü tercih tek chars değilile set("abc") değiştirebilirsiniz

+0

güzel olurdu, ancak python 2.4'ü prod sunucumuzda kullanabilirim. – AkaBkn

+0

+1, daha sonra birinin burada olduğunu ve python 2.7+ –

1

2.4'de, her zaman böyle işlemler için set işlemleri kullanıyorum. bunu bir uyarı değerinde (veya mesaj için veya istisna diğer tür) Eğer bazı beklenen anahtarları eksik olduğunda, özellikle, yapmam:

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

uygun logging.warn çağrıyı yerine, elbette (belki sadece logging.info veya Hatta logging.debug, belki logging.error, belki bir istisna).

sorted bölümü çoğunlukla kozmetiktir (güvenilir, yinelenebilir hata iletilerini severim), fakat aynı zamanda sınamada biraz yardımcı olur (logging.warn - veya herneyse) - sınamalarında Belirli bir dizgeyi beklerseniz ve missing setini sıralamamış olsaydım, uyarı dizgisi değişebilirdi, elbette, setler, dikteler gibi, bir sipariş kavramına sahip değiller).

İlgili konular