이 글에서는 Python의 dict 사전 구조의 연산 방법을 주로 소개합니다. 사전의 연산은 Python 입문 학습을 위한 기본 지식입니다.
1. 방법
1. 새 사전 만들기
1) 빈 사전 만들기
>>> dict1={} >>> dict2=dict() >>> dict1,dict2 ({}, {})
2) 새 값 생성 시 값 초기화
>>> dict1={1:'a',2:'b',3:'c'} >>> dict1 {1: 'a', 2: 'b', 3: 'c'}
3) 튜플 사용
>>> dict1=dict([(1,'a'),(2,'b'),(3,'c')]) >>> dict1 {1: 'a', 2: 'b', 3: 'c'}
2. 획득 방법
1) get(key) 사전에서 키에 해당하는 값을 가져옵니다. 및 반환 값
>>> dict1={1:'a',2:'b',3:'c'} >>> dict1.get(1) 'a'
사전에 없으면 NoneType
>>> type(dict1.get(4)) <type 'NoneType'>
필요한 키 값이 존재하지 않는 경우 다른 값을 지정하여 반환
>>> dict1.get(4,'not found') 'not found'
2), 키() 사전에 있는 모든 키 값을 가져오고 목록을 반환합니다
>>> dict1.keys() [1, 2, 3]
3), 값()은 해당 키() 메소드와 반환된 사전 모든 값 목록
>>> dict1.values() ['a', 'b', 'c']
4), items()는 (key, value)
>>> dict1.items() [(1, 'a'), (2, 'b'), (3, 'c')]
5), iterkeys(), itervalues(), iteritems()도 각각 모든 키, 값, (키, 값) 프리미티브를 얻습니다. 그러나 더 이상 목록을 반환하지 않고 반복자
>>> for key in dict1.iterkeys(): print key 1 2 3
3. 사전 값 설정 방법
1) 직접 방식은
>>> dict1[4]='d' >>> dict1 {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
그런데 이 방식은 제가 원하는 키값이 add가 이미 사전에 있으면 원본을 덮어쓰게 됩니다. value
>>> dict1[4]='e' >>> dict1 {1: 'a', 2: 'b', 3: 'c', 4: 'e'}
2), setdefault(key, value) 이 방법의 장점 삽입된 키가 사전에 없으면 이를 사전에 삽입하고 값을 반환하고, 그렇지 않으면 사전에 있으면 기존 값을 반환하고
을 덮어쓰지 않는다는 것입니다.>>> dict1 {1: 'a', 2: 'b', 3: 'c', 4: 'e'} >>> dict1.setdefault(5,'f') 'f' >>> dict1.setdefault(5,'g') 'f' >>> dict1 {1: 'a', 2: 'b', 3: 'c', 4: 'e', 5: 'f'}
4. 사전 삭제
1) pop(key) 지정된 키의 항목을 삭제하고 삭제된 항목의 값을 성공적으로 반환합니다. 존재하지 않으면 예외가 발생하므로 이 방법을 사용할 때는 키가 존재하는지 판단하거나 이 예외를 잡아야 합니다
>>> def pop_key(d,key): try: d.pop(key) print "sucess" except: print "key is not in dict" >>> dict1 {1: 'a', 2: 'b'} >>> pop_key(dict1,3) key is not in dict
또는
>>> def sub_dict2(d,key): if d.has_key(key): d.pop(key) print "sucess" else:print "key is not in dict" >>> pop_key(dict1,3) key is not in dict
여기서 has_key(key)는 해당 키가 사전에 있는지 확인하는 것입니다. 대신 d에 키를 사용할 수도 있습니다
2) popitem()은 A(키, 값) 튜플을 삭제한다는 점을 제외하면 pop()과 유사합니다.
위 방법을 사용하면 다음과 같은 작업을 수행할 수 있습니다. 고급 사용법을 사용합니다
A. 2개의 목록을 통해 사전을 생성합니다. 첫 번째 목록은 모두 키이고 두 번째 목록은 모든 값입니다
>>> list1=[1,2,3] >>> list2=['a','b','c'] >>> dict1=dict(zip(list1,list2)) >>> dict1 {1: 'a', 2: 'b', 3: 'c'}
B. 사전의 자식 찾기
>>> dict1 {1: 'a', 2: 'b', 3: 'c'} >>> dict1=dict([(1,'a'),(2,'b'),(3,'c')]) >>> dict1 {1: 'a', 2: 'b', 3: 'c'} >>> subkeys=[1,3] >>> def sub_dict(d,subkeys): return dict([(k,d.get(k)) for k in subkeys if k in d]) >>> print sub_dict(dict1,subkeys) {1: 'a', 3: 'c'}
C. , 키는 새 사전의 값이 되고 값은 새 사전의 키가 됩니다. (값에 Repeat가 있는 경우 역방향 사전은 하나만 유지됩니다.
>>> def invert_dict(d): return dict([(k,v) for v,k in d.iteritems()]) >>> print invert_dict(dict1) {'a': 1, 'c': 3, 'b': 2} >>>
5. 기타 기본 방법
1 ) has_key(key) 키가 사전에 있는지 확인
2) copy()는 a를 반환합니다. 사전 사본 (사본은 얕은 사본입니다)
>>> d2={1:[1],2:[2],3:[3]} >>> d3=d2.copy() >>> d3[1].append(4) >>> d2[1] [1, 4]
전체 복사를 하려면 copy.deepcopy(a)를 사용해야 합니다
>>> d2={1:[1],2:[2],3:[3]} >>> import copy >>> d3=copy.deepcopy(d2) >>> d3[1].append(4) >>> print d2[1] , d3[1] [1] [1, 4]
3) clear() dict 지우기
4) update(d)는 하나의 사전을 사용하여 다른 사전을 업데이트합니다. 이는 병합과 다소 유사합니다. 두 개의 사전
>>> dict1={1: 'a', 2: 'b', 3: 'c'} >>> dict2={1:'x',4:'y'} >>> dict1.update(dict2) >>> dict1 {1: 'x', 2: 'b', 3: 'c', 4: 'y'} >>>
2.
사전
<🎜을 탐색하는 방법은 다양합니다. >1. dict
>>> d {'a': 'aa', 'c': 'cc', 'b': 'bb'} >>> for i in d: print i,d[i] a aa c cc b bb
2. items() 사용
>>> for i,v in d.items(): print i,v a aa c cc b bb
>>> for (i,v) in d.items(): print i,v a aa c cc b bb
3.iteritems()
(더 좋은 방법인 것 같아요)
>>> for k,v in d.iteritems(): print k,v a aa c cc b bb
3. 약간의 고급 사용법
일반적으로 사전은 일대일 매핑이 이루어지지만 책과 같이 일대다 매핑이 필요한 경우 일부 단어가 나타나는 페이지 수를 세어야 합니다. 그런 다음 list를 dict의 값으로 사용할 수 있습니다. 이는 setdefault() 메서드
>>> d={'hello':[1,4,9],"good":[1,3,6]} >>> d {'good': [1, 3, 6], 'hello': [1, 4, 9]} >>> d.setdefault('good',[]).append(7) >>> d {'good': [1, 3, 6, 7], 'hello': [1, 4, 9]} >>> d.setdefault('bad',[]).append(2) >>> d {'bad': [2], 'good': [1, 3, 6, 7], 'hello': [1, 4, 9]} >>>
를 사용하여 수행할 수 있습니다.
当然,如果写成一个函数话,就可以更方便的使用,
我们也可以利用set来代替list
>>> def addFunc(d,word,pag): d.setdefault(word,set()).add(pag) >>> d={'hello':set([1,4,9]),"good":set([1,3,6])} >>> addFunc(d,'hello',8) >>> d {'good': set([1, 3, 6]), 'hello': set([8, 1, 4, 9])} >>> addFunc(d,'bad',8) >>> d {'bad': set([8]), 'good': set([1, 3, 6]), 'hello': set([8, 1, 4, 9])}
2、利用字典完成简单工厂模式
字典的value不单单只是一些常见的字符串,数值,还可以是类和方法,比如我们就可以这样来实现简单工厂模式
>>> class cat(object): def __init__(self): print 'cat init' >>> class dog(object): def __init__(self): print 'dag init' >>> d={'cat':cat,'dog':dog} >>> def factoryFunc(d,name): if name in d: return d[name]() else: raise Exception("error") >>> cat=factoryFunc(d,'cat') cat init
另外一个例子,利用变量来控制执行的函数
>>> def deal_cat(): print 'cat run!!' >>> def deal_dog(): print 'dag run!!' >>> d={'cat':deal_cat ,'dog':deal_dog } >>> animal='cat' >>> d[animal]() cat run!!
更多Python的dict字典结构操作方法相关文章请关注PHP中文网!