2014-07-23 3 views
-1

사전 (실제로 사전과 같은 개체)에 (복수)이 모두 주어진 집합이 있는지 어떻게 확인할 수 있습니까?사전에 여러 개의 키가 있는지 확인

은 지금까지 내가 사용하고 있습니다 :

d = { 'a': 1, 'b': 2, 'c': 3 } 
keys = ('a', 'b') 

def has_keys(d, keys): 
    for key in keys: 
     if not key in d: 
      return False 
    return True 

이 일을 더 우아하고 파이썬 방법이 있나요?

+2

왜 downvote? – rvighne

답변

10

를 사용하여 내장 함수 all()

>>> d = { 'a': 1, 'b': 2, 'c': 3 } 
>>> keys = ('a', 'b') 
>>> all(elem in d for elem in keys) 
True 
>>> keys = ('a', 'b', 'd') 
>>> all(elem in d for elem in keys) 
False 
+0

시원하게 보인다. 이 방법이 얼마나 효과적인지 아십니까? 또한, 'all'에 대한 인수에서 list-comprehension type을 무엇이라고 부릅니까? 전에 구문을 본 적이 한번도 없습니다. – rvighne

+3

이것은 생성자 표현식입니다. 그것은 요청 된 요소들을 생성하고,'all' 단락 회로가 알려지 자마자 값을 반환합니다. –

+1

그래서 처음으로 '거짓'값을 보게됩니다. 즉, 키가 'd'에 없으면, 키가 짧아지고 '거짓'을 반환합니다. 'all '의 구현은 내가 참조한 문서 페이지에서 제공됩니다. –

-1

당신은 전 "에서"키워드를 사용할 수 있습니다 = {1, 'B': 2, 'C'3 '은'} D 당신은 또한이 같은 시도 할 수 '없는' 인쇄

+0

* 여러 * 키를 테스트하고 싶습니다. 이것은 * one * 만 테스트합니다. – rvighne

1

: 인쇄 '예'다른 : 'D'D의 경우

>>> names = { 
     'a' : 11, 
     'b' : 10, 
     'c' : 14, 
     'd': 7 
} 
>>> keys = ('a', 'b') 
>>> set(keys).issubset(names) 
True 
+4

'timeit '에 따르면, 이것은 지금까지 가장 빠른 방법으로 ~ 2x입니다. 그리고 표현이 풍부한 IMO도 마찬가지입니다. – rvighne

+2

@rvighne : - 그래, 그게 사실이야! –

+0

@rvighne : 결과를 게시 할 수 있습니까? 나는 타이밍에 많은 차이를 보지 않을 것이다. 이 방법은 더 빠르지 만 2의 팩터가 아닙니다. –

관련 문제