Python collections 모듈 사용 방법
이 모듈은 파이썬 표준 내장 용기dict,list,set,tuple의 대체 선택을 제공하기 위해 특정 목표의 용기를 실현했다.
Counter는dict 하위 클래스입니다. 주로 방문한 대상의 빈도를 계산하는 데 사용됩니다.
>>> import collections
>>> #
... collections.Counter('hello world')
Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
>>> #
... collections.Counter('hello world hello lucy'.split())
Counter({'hello': 2, 'world': 1, 'lucy': 1})
일반적인 방법:
>>> c = collections.Counter('hello world hello lucy'.split())
>>> c
Counter({'hello': 2, 'world': 1, 'lucy': 1})
>>> # , get
... c['hello']
2
>>> #
... list(c.elements())
['hello', 'hello', 'world', 'lucy']
>>> c1 = collections.Counter('hello world'.split())
>>> c2 = collections.Counter('hello lucy'.split())
>>> c1
Counter({'hello': 1, 'world': 1})
>>> c2
Counter({'hello': 1, 'lucy': 1})
>>> # ,+ c1.update(c2)
... c1+c2
Counter({'hello': 2, 'world': 1, 'lucy': 1})
>>> # ,- c1.subtract(c2)
... c1-c2
Counter({'world': 1})
>>> #
... c.clear()
>>> c
Counter()
defaultdict새로운 유사한 사전의 대상을 되돌려줍니다.defaultdict는 내장된dict류의 하위 클래스입니다.
class collections.defaultdict([default_factory[, ...]])
>>> d = collections.defaultdict()
>>> d
defaultdict(None, {})
>>> e = collections.defaultdict(str)
>>> e
defaultdict(<class 'str'>, {})
예제defaultdict의 전형적인 사용법은 그 중의 내장 형식 (예를 들어str, int,list,dict 등) 을 기본 공장으로 사용하는 것입니다. 이 내장 형식들은 매개 변수가 호출되지 않을 때 빈 형식으로 되돌아옵니다.
>>> e = collections.defaultdict(str)
>>> e
defaultdict(<class 'str'>, {})
>>> e['hello']
''
>>> e
defaultdict(<class 'str'>, {'hello': ''})
>>> # ,
... e1 = {}
>>> e1['hello']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'hello'
int를 default_로 사용factory
>>> fruit = collections.defaultdict(int)
>>> fruit['apple'] = 2
>>> fruit
defaultdict(<class 'int'>, {'apple': 2})
>>> fruit['banana'] # , 0
0
>>> fruit
defaultdict(<class 'int'>, {'apple': 2, 'banana': 0})
default_로 list 사용하기factory
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = collections.defaultdict(list)
>>> for k,v in s:
... d[k].append(v)
...
>>> d
defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
>>> d.items()
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
>>> sorted(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
dict를 default_로 사용factory
>>> nums = collections.defaultdict(dict)
>>> nums[1] = {'one':1}
>>> nums
defaultdict(<class 'dict'>, {1: {'one': 1}})
>>> nums[2]
{}
>>> nums
defaultdict(<class 'dict'>, {1: {'one': 1}, 2: {}})
set을 default_로 사용factory
>>> types = collections.defaultdict(set)
>>> types[' '].add(' ')
>>> types[' '].add(' ')
>>> types[' '].add('AOC')
>>> types
defaultdict(<class 'set'>, {' ': {' ', ' '}, ' ': {'AOC'}})
OrderedDictPython 사전의 키 순서는 임의로 추가된 순서에 의해 제어되지 않습니다.
collections.OrderedDict
>>> o = collections.OrderedDict()
>>> o['k1'] = 'v1'
>>> o['k3'] = 'v3'
>>> o['k2'] = 'v2'
>>> o
OrderedDict([('k1', 'v1'), ('k3', 'v3'), ('k2', 'v2')])
이미 존재하는 키에 새 값을 추가하면 원래의 키의 위치를 보존하고value 값을 덮어씁니다.
>>> o['k1'] = 666
>>> o
OrderedDict([('k1', 666), ('k3', 'v3'), ('k2', 'v2')])
>>> dict(o)
{'k1': 666, 'k3': 'v3', 'k2': 'v2'}
namedtuple세 가지 명명 메타그룹을 정의하는 방법: 첫 번째 매개 변수는 명명 메타그룹을 만드는 구조기입니다(아래: Person1, Person2, Person3)
>>> P1 = collections.namedtuple('Person1',['name','age','height'])
>>> P2 = collections.namedtuple('Person2','name,age,height')
>>> P3 = collections.namedtuple('Person3','name age height')
인스턴스 명명 메타그룹
>>> lucy = P1('lucy',23,180)
>>> lucy
Person1(name='lucy', age=23, height=180)
>>> jack = P2('jack',20,190)
>>> jack
Person2(name='jack', age=20, height=190)
>>> lucy.name # .
'lucy'
>>> lucy.age
23
dequecollections.deque는 왼쪽에서 오른쪽으로 초기화 (방법 append (), iterable (교체 대상) 데이터에서 새 양방향 대기열 대상을 되돌려줍니다.iterable이 지정되지 않으면 새 대기열이 비어 있습니다.
collections.deque 대기열은 스레드 보안을 지원합니다. 양쪽에서 (append) 또는 팝업 (pop) 을 추가하는 데 복잡도 O (1) 입니다.
list 대상도 유사한 조작을 지원하지만, 여기는 정장 조작(pop(0), insert(0, v)의 비용을 최적화시켰다.
maxlen이 지정되지 않거나 None이면 deque는 임의의 길이로 성장할 수 있습니다.그렇지 않으면, deque는 지정한 최대 길이로 제한됩니다.한정된 길이의 deque가 가득 차면, 새 항목이 가입할 때, 같은 수량의 항목이 다른 쪽에서 팝업됩니다.
지원되는 방법:
>>> d = collections.deque(maxlen=10)
>>> d
deque([], maxlen=10)
>>> d.extend('python')
>>> [i.upper() for i in d]
['P', 'Y', 'T', 'H', 'O', 'N']
>>> d.append('e')
>>> d.appendleft('f')
>>> d.appendleft('g')
>>> d.appendleft('h')
>>> d
deque(['h', 'g', 'f', 'p', 'y', 't', 'h', 'o', 'n', 'e'], maxlen=10)
>>> d.appendleft('i')
>>> d
deque(['i', 'h', 'g', 'f', 'p', 'y', 't', 'h', 'o', 'n'], maxlen=10)
>>> d.append('m')
>>> d
deque(['h', 'g', 'f', 'p', 'y', 't', 'h', 'o', 'n', 'm'], maxlen=10)
ChainMap문제의 배경은 우리가 여러 개의 사전이나 맵을 가지고 있기 때문에 그것들을 하나의 단독 맵으로 통합시키려고 한다. 어떤 사람들은 업데이트로 합병할 수 있다고 말한다. 이렇게 하는 문제는 데이터 구조를 새로 만들어서 우리가 원래의 사전을 변경할 때 동일하지 않게 하는 것이다.동기화 조회 방법을 만들려면 ChainMap 을 사용하십시오.
두 개 이상의 사전을 합쳐서 조회할 때 뒤로 가서 순서대로 조회할 수 있다.간단한 사용:
>>> d1 = {'apple':1,'banana':2}
>>> d2 = {'orange':2,'apple':3,'pike':1}
>>> combined1 = collections.ChainMap(d1,d2)
>>> combined2 = collections.ChainMap(d2,d1)
>>> combined1
ChainMap({'apple': 1, 'banana': 2}, {'orange': 2, 'apple': 3, 'pike': 1})
>>> combined2
ChainMap({'orange': 2, 'apple': 3, 'pike': 1}, {'apple': 1, 'banana': 2})
>>> for k,v in combined1.items():
... print(k,v)
...
orange 2
apple 1
pike 1
banana 2
>>> for k,v in combined2.items():
... print(k,v)
...
apple 3
banana 2
orange 2
pike 1
한 가지 주의점은 ChainMap을 수정할 때 항상 첫 번째 사전만 수정하고, 첫 번째 사전이 이 키가 없으면 추가한다는 것이다.
>>> d1 = {'apple':1,'banana':2}
>>> d2 = {'orange':2,'apple':3,'pike':1}
>>> c = collections.ChainMap(d1,d2)
>>> c
ChainMap({'apple': 1, 'banana': 2}, {'orange': 2, 'apple': 3, 'pike': 1})
>>> c['apple']
1
>>> c['apple'] = 2
>>> c
ChainMap({'apple': 2, 'banana': 2}, {'orange': 2, 'apple': 3, 'pike': 1})
>>> c['pike']
1
>>> c['pike'] = 3
>>> c
ChainMap({'apple': 2, 'banana': 2, 'pike': 3}, {'orange': 2, 'apple': 3, 'pike': 1})
원리적으로 말하자면 ChainMap은 실제로 넣은 사전을 하나의 대기열에 저장하고 사전의 추가 삭제 등 조작은 첫 번째 사전에서만 진행되며 검색할 때 순서대로 찾아낸다.new_child () 방법은 실질적으로 목록의 첫 번째 요소 앞에 사전을 넣는 것입니다. 기본값은 {}이고,parents는 목록의 시작 요소를 제거합니다.
>>> a = collections.ChainMap()
>>> a['x'] = 1
>>> a
ChainMap({'x': 1})
>>> b = a.new_child()
>>> b
ChainMap({}, {'x': 1})
>>> b['x'] = 2
>>> b
ChainMap({'x': 2}, {'x': 1})
>>> b['y'] = 3
>>> b
ChainMap({'x': 2, 'y': 3}, {'x': 1})
>>> a
ChainMap({'x': 1})
>>> c = a.new_child()
>>> c
ChainMap({}, {'x': 1})
>>> c['x'] = 1
>>> c['y'] = 1
>>> c
ChainMap({'x': 1, 'y': 1}, {'x': 1})
>>> d = c.parents
>>> d
ChainMap({'x': 1})
>>> d is a
False
>>> d == a
True
>>> a = {'x':1,'z':3}
>>> b = {'y':2,'z':4}
>>> c = collections.ChainMap(a,b)
>>> c
ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
>>> c.maps
[{'x': 1, 'z': 3}, {'y': 2, 'z': 4}]
>>> c.parents
ChainMap({'y': 2, 'z': 4})
>>> c.parents.maps
[{'y': 2, 'z': 4}]
>>> c.parents.parents
ChainMap({})
>>> c.parents.parents.parents
ChainMap({})
Python collections 모듈의 사용 방법에 관한 이 글은 여기까지 소개되었습니다. 더 많은 Python collections 모듈 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.