티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Should I use 'has_key()' or 'in' on Python dicts?

파이썬 딕트에서 'has_key()' 또는 'in'을 사용해야 합니까?

 문제 내용 

Given:

주어진 경우:
>>> d = {'a': 1, 'b': 2}

 

Which of the following is the best way to check if 'a' is in d?

다음 중 'a'가 d에 있는지 확인하는 가장 좋은 방법은 무엇입니까?
>>> 'a' in d
True
>>> d.has_key('a')
True

 

 

 높은 점수를 받은 Solution 

in is definitely more pythonic.

in은 확실히 더 파이썬스럽습니다.

 

In fact has_key() was removed in Python 3.x.

사실 has_key()는 파이썬 3.x에서 제거되었습다.

 

 

 

 가장 최근 달린 Solution 

Expanding on Alex Martelli's performance tests with Adam Parkin's comments...

Alex Martelli의 성능 테스트를 Adam Parkin의 코멘트와 함께 확장합니다.
$ python3.5 -mtimeit -s'd=dict.fromkeys(range( 99))' 'd.has_key(12)'
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/timeit.py", line 301, in main
    x = t.timeit(number)
  File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/timeit.py", line 178, in timeit
    timing = self.inner(it, self.timer)
  File "<timeit-src>", line 6, in inner
    d.has_key(12)
AttributeError: 'dict' object has no attribute 'has_key'

$ python2.7 -mtimeit -s'd=dict.fromkeys(range(  99))' 'd.has_key(12)'
10000000 loops, best of 3: 0.0872 usec per loop

$ python2.7 -mtimeit -s'd=dict.fromkeys(range(1999))' 'd.has_key(12)'
10000000 loops, best of 3: 0.0858 usec per loop

$ python3.5 -mtimeit -s'd=dict.fromkeys(range(  99))' '12 in d'
10000000 loops, best of 3: 0.031 usec per loop

$ python3.5 -mtimeit -s'd=dict.fromkeys(range(1999))' '12 in d'
10000000 loops, best of 3: 0.033 usec per loop

$ python3.5 -mtimeit -s'd=dict.fromkeys(range(  99))' '12 in d.keys()'
10000000 loops, best of 3: 0.115 usec per loop

$ python3.5 -mtimeit -s'd=dict.fromkeys(range(1999))' '12 in d.keys()'
10000000 loops, best of 3: 0.117 usec per loop

 

 

출처 : https://stackoverflow.com/questions/1323410/should-i-use-has-key-or-in-on-python-dicts

반응형
댓글
공지사항
최근에 올라온 글