반응형
사전 항목을 추가하거나 늘리는 방법은 무엇입니까?
저는 현재 오랜만에 파이썬에 재 참여하고 사랑하고 있습니다. 그러나 나는 계속해서 패턴을 마주하게된다. 나는 내가 원하는 것을 표현하는 더 좋은 방법이 있어야하고 아마도 그것을 잘못된 방법으로하고있을 것이라고 생각한다.
내가 작성중인 코드는 다음과 같은 형식입니다.
# foo is a dictionary
if foo.has_key(bar):
foo[bar] += 1
else:
foo[bar] = 1
나는 내 프로그램에서 이것을 많이 쓰고있다. 나의 첫 번째 반응은 도우미 함수로 밀어내는 것이지만, 너무 자주 파이썬 라이브러리는 이미 이와 같은 것을 제공합니다.
내가 놓친 간단한 구문 트릭이 있습니까? 아니면 이것이 수행되어야하는 방식입니까?
사용 defaultdict
:
from collections import defaultdict
foo = defaultdict(int)
foo[bar] += 1
Python> = 2.7에서는 이러한 목적을위한 별도의 Counter 클래스 도 있습니다 . Python 2.5 및 2.6의 경우 백 포트 된 버전을 사용할 수 있습니다 .
dict
의 get()
방법은 요청 된 키가 발견되지 않은 경우 기본값을 제공하는 데 사용할 수있는 선택적인 두 번째 매개 변수를 사용합니다 :
foo[bar] = foo.get(bar, 0) + 1
시간 비교를했습니다. 거의 동일합니다. 하지만 한 줄로 된 .get()
명령이 가장 빠릅니다.
산출:
get 0.543551800627
exception 0.587318710994
haskey 0.598421703081
암호:
import timeit
import random
RANDLIST = [random.randint(0, 1000) for i in range(10000)]
def get():
foo = {}
for bar in RANDLIST:
foo[bar] = foo.get(bar, 0) + 1
def exception():
foo = {}
for bar in RANDLIST:
try:
foo[bar] += 1
except KeyError:
foo[bar] = 1
def haskey():
foo = {}
for bar in RANDLIST:
if foo.has_key(bar):
foo[bar] += 1
else:
foo[bar] = 1
def main():
print 'get', timeit.timeit('get()', 'from __main__ import get', number=100)
print 'exception', timeit.timeit('exception()', 'from __main__ import exception', number=100)
print 'haskey', timeit.timeit('haskey()', 'from __main__ import haskey', number=100)
if __name__ == '__main__':
main()
Python> = 2.5의 경우 다음을 수행 할 수 있습니다.
foo[bar] = 1 if bar not in foo else foo[bar]+1
예외 처리에서 제어 구조를 활용할 수도 있습니다. KeyError
당신이 존재하지 않는 키에 값을 할당하려고 할 때 예외가 사전에 의해 발생합니다 :
my_dict = {}
try:
my_dict['a'] += 1
except KeyError, err: # in 2.6: `except KeyError as err:`
my_dict['a'] = 1
참조 URL : https://stackoverflow.com/questions/2626059/how-to-add-or-increment-a-dictionary-entry
반응형
'development' 카테고리의 다른 글
새 Google Analytics 3.0 베타를 설치하려고 할 때 발생하는 링커 오류 (0) | 2020.12.27 |
---|---|
layout / main.xml에서 내부 클래스보기를 참조하는 중 오류가 발생했습니다. (0) | 2020.12.27 |
jQuery 자동 완성 : 애니메이션 GIF 로딩 이미지를 표시하는 방법 (0) | 2020.12.27 |
PHP 임의의 x 자리 숫자 (0) | 2020.12.27 |
자바 스크립트 컬렉션 (0) | 2020.12.27 |