2010-08-05 13 views

Antwort

20

können Sie set.issubset(...) verwenden, etwa so:

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

Python 3 hat eine Reihe Literalsyntax eingeführt, die auf Python zurückportiert wurde, 2,7, so in diesen Tagen die oben beschrieben werden kann:

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

Set (sub_dict) .issubset (parent_dict) scheint auch zu arbeiten, und es ist einfacher für mich. Aber danke für den Zeiger :) – trojjer

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

könnte für eine itemgetter in einem Try/außer gewickelt verwenden.

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

Aber eigentlich ziehe ich Paul McGuire Lösung

5

In Python3 können Sie

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

In python2.7 schreiben Sie

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

natürlich schreiben können, wenn die Schlüssel nicht einzelne Zeichen können Sie set("abc") mitersetzen

+0

wäre süß, aber ich kann nur Python 2.4 auf unserem Prod-Server verwenden. – AkaBkn

+0

+1 für die Vollständigkeit, falls jemand später hier sucht und Python verwendet 2.7+ –

1

In 2.4 verwende ich immer Set-Operationen für solche Zwecke. Wenn es sich lohnt, eine Warnung (oder eine andere Art von msg oder Ausnahme), wenn einige erwartete Schlüssel fehlen, insbesondere, ich mache:

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

den logging.warn Anruf gegebenenfalls zu ersetzen, natürlich (vielleicht auch nur logging.info oder sogar logging.debug, vielleicht logging.error, vielleicht eine ausnahme). Der sorted Teil ist größtenteils kosmetisch (ich mag zuverlässige, wiederholbare Fehlermeldungen), hilft aber auch ein bisschen beim Testen (wenn ich mloging.warn mock - oder was auch immer - in den Tests ist es schön zu können erwarte eine bestimmte Zeichenkette, und wenn ich die missing Menge nicht sortierte, könnte die Warnungsschnur natürlich variieren, da Sätze, wie dicts, kein Konzept der Reihenfolge haben).

Verwandte Themen