어떻게 파 이 썬 사전 을 효율적으로 사용 하 는 방법 에 대한 상세 한 설명

5723 단어 python자전.
머리말
알다 시 피 사전(dict)대상 은 Python 에서 가장 자주 사용 하 는 데이터 구조 입 니 다.커 뮤 니 티 에 서 는"Python 이 사전 으로 전 세 계 를 불 러 오 려 고 한다"고 농담 을 했 습 니 다.사전 이 Python 에서 의 중요성 은 두말 할 필요 도 없습니다.여기 서 사전 의 효율 적 인 사용 에 관 한 몇 가지 목록 을 정리 하 였 습 니 다.Python 개발 자가 일상적인 응용 개발 에서 합 리 적 으로 이용 하여 코드 를 더욱 Python 으로 만 들 기 를 바 랍 니 다.
1、in 키워드 로 key 존재 여부 확인
Python 의 선 에는 다음 과 같은 개발 철학 이 있 습 니 다.
There should be one-- and preferably only one --obvious way to do it.
가능 한 한 하 나 를 찾 는 것 이 가장 좋 은 것 은 유일한 명백 한 해결 방안 이다.Python 2 에서 어떤 key 가 사전 에 존재 하 는 지 판단 할 때 has 를 사용 할 수 있 습 니 다.key 방법,다른 방법 은 in 키 워드 를 사용 합 니 다.그러나 후 자 를 강력 히 추천 합 니 다.in 의 처리 속도 가 빠 르 기 때 문 입 니 다.또 다른 이 유 는 has 입 니 다.key 이 방법 은 Python 3 에서 제거 되 었 습 니 다.py2 와 py3 두 버 전의 코드 를 동시에 호 환 하려 면 in 을 사용 하 는 것 이 가장 좋 습 니 다.
bad

d = {'name': 'python'}

if d.has_key('name'):
 pass
good

if 'name' in d:
 pass
2、get 으로 사전 의 값 가 져 오기
사전 의 값 을 가 져 오 는 데 있어 서 간단 한 방법 은 d[x]로 이 요 소 를 방문 하 는 것 입 니 다.그러나 이러한 상황 은 key 가 존재 하지 않 는 상황 에서 KeyError 오 류 를 알 릴 수 있 습 니 다.물론 key 가 사전에 서 가 져 오 는 지 확인 하 는 데 in 작업 을 할 수 있 습 니 다.그러나 이러한 방식 은 Python 의 선 에 부합 되 지 않 습 니 다.
Simple is better than complex.
Flat is better than nested.
좋 은 코드 는 간단 하고 알 기 쉬 워 야 하 며 납작한 코드 구 조 는 더욱 읽 을 수 있다.우 리 는 get 방법 으로 if...else 를 대체 할 수 있다.
bad

d = {'name': 'python'}
if 'name' in d:
 print(d['hello'])
else:
 print('default')
good

print(d.get("name", "default"))
3.setdefault 을 사전 에 존재 하지 않 는 key 로 결 성 된 값 을 설정 합 니 다.

data = [
  ("animal", "bear"),
  ("animal", "duck"),
  ("plant", "cactus"),
  ("vehicle", "speed boat"),
  ("vehicle", "school bus")
 ]
분류 통 계 를 할 때 같은 유형의 데 이 터 를 사전 의 특정한 유형 에 포함 시 키 고 싶 습 니 다.예 를 들 어 상기 코드 는 같은 유형의 사물 을 목록 의 형식 으로 다시 조립 하여 새로운 사전 을 얻 기 를 바 랍 니 다.

groups = {}

>>> 
{'plant': ['cactus'], 
 'animal': ['bear', 'duck'], 
 'vehicle': ['speed boat', 'school bus']}
키 가 존재 하 는 지 여 부 를 판단 하고 존재 하지 않 으 면 목록 대상 으로 초기 화 한 다음 후속 작업 을 수행 하 는 것 이 일반적인 방식 이다.더 좋 은 방법 은 사전 의 setdefault 방법 을 사용 하 는 것 이다.
bad

for (key, value) in data:
 if key in groups:
  groups[key].append(value)
 else:
  groups[key] = [value]
good

groups = {}
for (key, value) in data:
 groups.setdefault(key, []).append(value)
setdefault 의 역할 은:
  • key 가 사전 에 존재 하면 해당 하 는 값 을 직접 되 돌려 주 고 get 방법
  • 과 같 습 니 다.
  • key 가 사전 에 존재 하지 않 으 면 setdefault 의 두 번 째 매개 변 수 를 이 key 의 값 으로 하고 이 값 을 되 돌려 줍 니 다.
  • 4、defaultdict 로 사전 대상 초기 화
    d[x]가 x 에 타 임 스 오류 가 없 기 를 원 하지 않 는 다 면 요 소 를 가 져 올 때 get 방법 을 사용 하 는 것 을 제외 하고 다른 방식 은 collections 모듈 의 defaultdict 로 사전 을 초기 화 할 때 함 수 를 지정 하 는 것 입 니 다.사실은 defaultdict 는 dict 의 하위 클래스 입 니 다.
    
    from collections import defaultdict
    
    groups = defaultdict(list)
    for (key, value) in data:
     groups[key].append(value)
    key 가 사전 에 존재 하지 않 을 때 list 함 수 는 호출 되 고 빈 목록 의 할당 값 을 d[key]에 되 돌려 줍 니 다.그러면 d[k]를 호출 하면 잘못 보고 할 까 봐 걱정 하지 않 아 도 됩 니 다.
    5、from keys 로 목록 을 사전 으로 변환
    
    keys = {'a', 'e', 'i', 'o', 'u' }
    value = []
    d = dict.fromkeys(keys, value)
    print(d)
    
    >>>
    {'i': [], 'u': [], 'e': [], 
     'a': [], 'o': []}
    6.사전 으로 switch...case 문 구 를 실현 합 니 다.
    Python 에는 switch...case 문구 가 없습니다.이 문 제 는 Python 의 아버지 인 거북 아 저 씨 는 이 문법 이 과거 에 없 었 고 지금 은 없 으 며 앞으로 도 없 을 것 이 라 고 말 합 니 다.Python 의 간결 한 문법 은 if...elif 로 충분히 실현 할 수 있 기 때 문 입 니 다.분기 판단 이 너무 많 으 면 사전 으로 대체 할 수도 있다.
    
    if arg == 0:
     return 'zero'
    elif arg == 1:
     return 'one'
    elif arg == 2:
     return "two"
    else:
     return "nothing"
    good
    
    data = {
     0: "zero",
     1: "one",
     2: "two",
    }
    data.get(arg, "nothing")
    7.iteritems 를 사용 하여 사전 의 요 소 를 교체 합 니 다.
    python 은 사전 의 요 소 를 교체 하 는 몇 가지 방식 을 제공 합 니 다.첫 번 째 는 items 방법 을 사용 하 는 것 입 니 다.
    
    d = {
     0: "zero",
     1: "one",
     2: "two",
    }
    
    for k, v in d.items():
     print(k, v)
    items 방법 은(key,value)로 구 성 된 목록 대상 을 되 돌려 줍 니 다.이러한 방식 의 단점 은 초대형 사전 을 교체 할 때 메모리 가 순식간에 두 배로 확 대 됩 니 다.목록 대상 은 모든 요 소 를 한꺼번에 메모리 에 불 러 오기 때 문 입 니 다.더 좋 은 방법 은 iteritems 를 사용 하 는 것 입 니 다.
    
    for k, v in d.iteritems():
     print(k, v)
    iteritems 는 교체 기 대상 을 되 돌려 줍 니 다.교체 기 대상 은 타성 로드 기능 을 가지 고 있 습 니 다.진정 으로 필요 할 때 만 값 을 생 성 합 니 다.이러한 방식 은 교체 과정 에서 추가 메모리 로 이 데 이 터 를 불 러 올 필요 가 없습니다.Python 3 에 서 는 items 방법 만 있 습 니 다.Python 2 의 iteritems 와 같 고 iteritems 라 는 방법 명 은 제거 되 었 습 니 다.
    8.사전 유도 식 사용
    유도 식 은 절묘 한 것 입 니 다.목록 유도 식 이 나 오 면 map,filter 등 함수 가 무색 합 니 다.Python 2.7 이후 버 전 입 니 다.이 기능 은 사전 과 집합 으로 확장 되 었 습 니 다.사전 대상 을 구축 하 는 데 dict 방법 을 사용 하지 않 아 도 됩 니 다.
    bad
    
    numbers = [1,2,3]
    d = dict([(number,number*2) for number in numbers])
    good
    
    numbers = [1, 2, 3]
    d = {number: number * 2 for number in numbers}
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기