어떻게 파 이 썬 사전 을 효율적으로 사용 하 는 방법 에 대한 상세 한 설명
알다 시 피 사전(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 의 역할 은: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}
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.