2010-08-05 21 views

Odpowiedz

20

Można użyć set.issubset(...), tak:

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

Python 3 wprowadziła zestaw dosłownego składni który został zawarty do Python 2.7, więc te dni powyższe można zapisać:

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

zestaw (sub_dict) .issubset (parent_dict) wydaje się również działać, i jest to dla mnie prostsze. Ale dzięki za wskaźnik :) – trojjer

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

tylko przydałby itemgetter zawinięte w próbie/z wyjątkiem.

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

Ale faktycznie wolę rozwiązanie Paul McGuire za

5

W Python3 można napisać

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

W Python2.7 można napisać

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

oczywiście jeśli są klucze nie pojedyncze znaki, które można zastąpić set("abc") z set(('a', 'b', 'c'))

+0

byłby słodki, ale mogę używać tylko Pythona 2.4 na naszym serwerze prod. – AkaBkn

+0

+1 dla kompletności w przypadku, gdy ktoś później szuka tutaj i używa Pythona 2.7+ –

1

W wersji 2.4 zawsze używam operacji ustawiania dla takich celów. Czy warto ostrzeżenie (lub inny rodzaj MSG lub wyjątku), gdy niektóre klawisze są oczekiwane brakuje, zwłaszcza, robię:

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

zastępując połączenia logging.warn odpowiednio, oczywiście (może po prostu logging.info lub nawet logging.debug, być może logging.error, może wyjątek).

Część jest w większości kosmetyczna (lubię wiarygodne, powtarzalne komunikaty o błędach), ale pomaga też trochę w testowaniu (kiedy robię makiety logging.warn - lub cokolwiek innego - w testach miło jest móc oczekuj określonego ciągu, a jeśli nie posortowałem zestawu missing, ciąg znaków ostrzegawczych może się różnić, ponieważ zestawy, takie jak dict, nie mają pojęcia porządku).

Powiązane problemy