파 이 썬 사전 요약

9140 단어 Python자전.
사전(dict)구 조 는 Python 에서 자주 사용 하 는 데이터 구조 입 니 다.필 자 는 자신의 실제 사용 경험 과 결합 하여 사전 관련 지식 에 대해 작은 매듭 을 짓 고 독자 에 게 시사 점 을 주 기 를 바 랍 니 다.
사전 만 들 기
흔히 볼 수 있 는 사전 생 성 방법 은 먼저 빈 사전 을 만 든 다음 에 키(key)와 값(value)을 하나씩 추가 하 는 것 입 니 다.예 를 들 어 사전 person={'name':'tome','age':22,'city':'Shanghai,'ID':'073569'}을 만 들 면 다음 코드 를 사용 할 수 있 습 니 다.

person = {}

person['name'] = 'Tom'
person['age'] = 22
person['city'] = 'Shanghai'
person['ID'] = '073569'

print(person)
출력 결 과 는:
{'name': 'Tom', 'age': 22, 'city': 'Shanghai', 'ID': '073569'}
이러한 생 성 방식 은 간단 하고 원시 적 이 며 코드 가 간결 하고 우아 하지 않다.우 리 는 zip 함수 로 간단하게 이 사전 을 만 듭 니 다.

attrs = ['name', 'age', 'city', 'ID']
values = ['Tom', 22, 'Shanghai', '073569']
person = dict(zip(attrs, values))

print(person)

출력 결 과 는 원래 코드 와 일치 합 니 다.
자전 을 편력 하 다
실제 응용 에서 우 리 는 사전 을 옮 겨 다 니 며 실현 하 는 방법 은 다음 과 같은 코드 를 참고 할 수 있다.

attrs = ['name', 'age', 'city', 'ID']
values = ['Tom', 22, 'Shanghai', '073569']
person = dict(zip(attrs, values))

for key, value in person.items():
  print('Key:%-6s, Value:%s'%(key, value))

출력 결 과 는:
Key:name  , Value:Tom
Key:age   , Value:22
Key:city  , Value:Shanghai
Key:ID    , Value:073569
키 쌍
실제 응용 프로그램 에서,때때로 우 리 는 사전 의 어떤 값(value)에 대응 하 는 키(key)를 찾 아야 한다.사전 을 옮 겨 다 니 는 것 은 선택 이 고,키 값 을 바 꾸 는 것 은 다른 선택 이다.키 값 을 맞 추 는 실현 코드 는 다음 과 같 습 니 다.

attrs = ['name', 'age', 'city', 'ID']
values = ['Tom', 22, 'Shanghai', '073569']
person = dict(zip(attrs, values))

print('   :')
print(person)

Person = {v:k for k,v in person.items()}

print('   :')
print(Person)

출력 결 과 는:
조정 전:
{'name': 'Tom', 'age': 22, 'city': 'Shanghai', 'ID': '073569'}
대조 후:
{'Tom': 'name', 22: 'age', 'Shanghai': 'city', '073569': 'ID'}
순서 사전 OrderedDict
Python 의 사전 은 무질서 합 니 다.꺼 낸 키 는 무질서 합 니 다.hash 에 따라 저장 되 기 때 문 입 니 다.때때로 우 리 는 사전 의 항목(items)이나 키(keys)가 질서 있 게 저장 되 어야 한다.이때 collections 모듈 의 OrderedDict 를 사용 할 수 있다.이것 은 질서 있 는 사전 구조 이다.
예제 코드 는 다음 과 같 습 니 다(Python 버 전 은 3.5.2).

from collections import OrderedDict

d = {}
d['Tom']='A'
d['Jack']='B'
d['Leo']='C'
d['Alex']='D'
print('    (dict):')
for k,v in d.items():
  print(k,v)

d1 = OrderedDict()
d1['Tom']='A'
d1['Jack']='B'
d1['Leo']='C'
d1['Alex']='D'
print('
(OrderedDict):') for k,v in d1.items(): print(k,v)
출력 결과:
무질서 사전(dict):
Leo C
Jack B
Tom A
Alex D
순서 사전(OrderedDict):
Tom A
Jack B
Leo C
Alex D
기본 사전 collections.defaultdict
collections.defaultdict 는 Python 내 에 dict 류 를 만 드 는 하위 클래스 입 니 다.첫 번 째 매개 변 수 는 default 입 니 다.factory 속성 은 초기 값 을 제공 합 니 다.기본 값 은 None 입 니 다.그것 은 하나의 방법 을 덮어 쓰 고 인 스 턴 스 변 수 를 추가 합 니 다.다른 기능 은 dict 와 같 지만 존재 하지 않 는 키 에 기본 값 을 제공 하여 KeyError 이상 을 피 할 수 있 습 니 다.
우 리 는 통계 목록 에 있 는 단어의 주파 수 를 예 로 들 어 collections.defaultdict 의 장점 을 보 여 줍 니 다.
일반적인 상황 에서,우리 통계 목록 의 단어 주파수 코드 는 다음 과 같다.

words = ['sun', 'moon', 'star', 'star',\
     'star', 'moon', 'sun', 'star']

freq_dict = {}
for word in words:
  if word not in freq_dict.keys():
    freq_dict[word] = 1
  else:
    freq_dict[word] += 1

for key, val in freq_dict.items():
  print(key, val)

출력 결 과 는 다음 과 같 습 니 다.
sun 2
moon 2
star 4
collections.defaultdict 를 사용 하면 코드 를 최적화 할 수 있 습 니 다.

from collections import defaultdict

words = ['sun', 'moon', 'star', 'star',\
     'star', 'moon', 'sun', 'star']

freq_dict = defaultdict(int)
for word in words:
  freq_dict[word] += 1

for key, val in freq_dict.items():
  print(key, val)

다른 기본 초기 값 은 set,list,dict 등 입 니 다.
사전 의 값 에 접근 하기
익숙 한 사각형 괄호 에 해당 하 는 키 를 넣 으 면 다음 과 같은 인 스 턴 스 가 있 습 니 다.

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

print "dict['Name']: ", dict['Name'];
print "dict['Age']: ", dict['Age'];
#        :
#dict['Name']: Zara
#dict['Age']: 7
사전 에 없 는 키 로 데 이 터 를 접근 하면 다음 과 같이 출력 오류 가 발생 합 니 다.

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

print "dict['Alice']: ", dict['Alice'];
이상 인 스 턴 스 출력 결과:
#KeyError: 'Alice'[/code]
사전 을 고치다
사전 에 새로운 내용 을 추가 하 는 방법 은 새로운 키/값 쌍 을 추가 하 는 것 입 니 다.기 존 키/값 을 수정 하거나 삭제 하 는 것 은 다음 과 같은 인 스 턴 스 입 니 다.

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry

 
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];
#        :
#dict['Age']: 8
#dict['School']: DPS School

사전 요소 삭제
단일 요 소 를 삭제 할 수도 있 고 사전 을 비 울 수도 있 습 니 다.비 울 때 는 한 가지 조작 만 필요 합 니 다.
사전 삭제 용 del 명령 을 표시 합 니 다.다음 인 스 턴 스:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

del dict['Name']; #     'Name'   
dict.clear();   #         
del dict ;    #     

print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];
#         ,   del       :
dict['Age']:
사전 내장 함수&방법
Python 사전 에는 다음 과 같은 내장 함수 가 포함 되 어 있 습 니 다.

cmp(dict1, dict2) #        。
len(dict)       #        ,     。
str(dict)       #             。
type(variable)   #         ,              。    
Python 사전 에는 다음 과 같은 내장 방법 이 포함 되 어 있 습 니 다.

radiansdict.clear()  #         
radiansdict.copy()  #          
radiansdict.fromkeys()  #       ,   seq        ,val            
radiansdict.get(key, default=None)  #       ,          default 
radiansdict.has_key(key)  #      dict   true,    false
radiansdict.items()  #         ( ,  )     
radiansdict.keys()  #             
radiansdict.setdefault(key, default=None)  # get()  ,              ,          default
radiansdict.update(dict2)  #   dict2  /     dict 
radiansdict.values()  #            
사전 연습 코드

print('''|---         ---|
|---1、        ---|
|---2、        ---|
|---3、        ---|
|---4、        ---|''')
addressBook={}#     
while 1:
  temp=input('       :')
  if not temp.isdigit():
    print("       ,       ")
    continue
  item=int(temp)#     
  if item==4:
    print("|---         ---|")
    break
  name = input("        :")
  if item==1:
    if name in addressBook:
      print(name,':',addressBook[name])
      continue
    else:
      print("       !")
  if item==2:
    if name in addressBook:
      print("              -->>",name,":",addressBook[name])
      isEdit=input("         (Y/N):")
      if isEdit=='Y':
        userphone = input("        :")
        addressBook[name]=userphone
        print("       ")
        continue
      else:
        continue
    else:
      userphone=input("        :")
      addressBook[name]=userphone
      print("       !")
      continue

  if item==3:
    if name in addressBook:
      del addressBook[name]
      print("    !")
      continue
    else:
      print("      ")

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기