[PYTHON] 사전 키가 존재하는지 확인하고 그것이 존재한다면 값을 처리하는 가장 효율적인 방법
PYTHON사전 키가 존재하는지 확인하고 그것이 존재한다면 값을 처리하는 가장 효율적인 방법
MyDict = {'key1':'value1', 'key2':'value2'}
나는이 몇 가지 방법을 사용할 수 있습니다 :
if 'key1' in MyDict:
var1 = MyDict['key1']
또는
if MyDict.has_key('key1'):
var1 = MyDict['key1']
또는
if MyDict['key1']:
var1=MyDict['key1']
해결법
-
==============================
1.당신을위한 작은 벤치 마크 (ipython) :
당신을위한 작은 벤치 마크 (ipython) :
In [1]: def test_1(d, k): ...: if k in d: ...: var1 = d[k] ...: In [2]: def test_2(d, k): ...: if d.has_key(k): ...: var1 = d[k] ...: In [3]: def test_3(d, k): ...: try: ...: var1 = d[k] ...: except KeyError as e: ...: pass ...: In [4]: def test_4(d, k): ...: if d.get(k): ...: var1 = d[k] ...: In [5]: my_dict = {'key{}'.format(i): 'value{}'.format(i) for i in range(1000)} In [6]: key_valid = "key5" In [7]: key_non_valid = "key" In [8]: %timeit test_1(my_dict, key_valid) 10000000 loops, best of 3: 172 ns per loop In [9]: %timeit test_1(my_dict, key_non_valid) 10000000 loops, best of 3: 132 ns per loop In [10]: %timeit test_2(my_dict, key_valid) 1000000 loops, best of 3: 211 ns per loop In [11]: %timeit test_2(my_dict, key_non_valid) 10000000 loops, best of 3: 171 ns per loop In [12]: %timeit test_3(my_dict, key_valid) 10000000 loops, best of 3: 151 ns per loop In [13]: %timeit test_3(my_dict, key_non_valid) 1000000 loops, best of 3: 1.07 µs per loop In [14]: %timeit test_4(my_dict, key_valid) 1000000 loops, best of 3: 246 ns per loop In [15]: %timeit test_4(my_dict, key_non_valid) 10000000 loops, best of 3: 189 ns per loop
결론 : dict의 생성 키는 일반적으로 가장 빠르며, 유효한 키의 경우를 제외하고는 try 만 수행하면 성능이 향상됩니다. 작동하는 경우 수행하지 않기 때문입니다.
-
==============================
2.MyDict [ "key1"]이 설정되어있을 때만 var1을 정의하려고한다고 가정하면 var1 = MyDict.get ( "key1", default = some_sentinel_or_default_value)입니다.
MyDict [ "key1"]이 설정되어있을 때만 var1을 정의하려고한다고 가정하면 var1 = MyDict.get ( "key1", default = some_sentinel_or_default_value)입니다.
wrt / 공연, 그것은 대부분의 시간에 당신의 사전에 "key1"이있을 것으로 기대하는지 여부에 달려 있습니다. 첫 번째 경우 try / except 블록이 더 빠를 수도 있고, 그렇지 않은 경우 속도가 느려질 수도 있습니다 (실제 예외가있을 때 블록을 설치하는 것은 저렴하지만 비용은 많이 듭니다).
퍼포먼스에 대해 정말로 걱정한다면, timeit 모듈을 사용하여 실제 데이터에 대한 다양한 옵션을 테스트하는 것이 좋습니다.
-
==============================
3.이 방법은 매우 빠릅니다.
이 방법은 매우 빠릅니다.
if 'key1' in MyDict: var1 = MyDict['key1']
사전 및 해싱 항목의 특정 조건을 가정 할 때이 값은 평균값이어야합니다. O [1]
from https://stackoverflow.com/questions/28859095/most-efficient-method-to-check-if-dictionary-key-exists-and-process-its-value-if by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] PySpark 데이터 프레임에 새로운 열로 열 합계를 추가하십시오. (0) | 2018.11.23 |
---|---|
[PYTHON] 음수 0을 파이썬 문자열에서 양수로 0으로 포맷하는 방법은 무엇입니까? (0) | 2018.11.23 |
[PYTHON] 파이썬 사전을 키로 사용 (중첩되지 않음) (0) | 2018.11.23 |
[PYTHON] 파이썬에서 문자열을 분할하지 않고 튜플로 변환 (0) | 2018.11.23 |
[PYTHON] 최신 종속성에도 불구하고 파이썬 요청에 SSL 오류가 발생했습니다. (0) | 2018.11.23 |