>  기사  >  백엔드 개발  >  Python에서 biddict 모듈 양방향 사전 구조를 사용하는 비결

Python에서 biddict 모듈 양방향 사전 구조를 사용하는 비결

WBOY
WBOY원래의
2016-08-04 08:55:422349검색

빠른 시작

이 모듈은 일대일 매핑 유형의 일부 작업을 처리하기 위해 세 가지 클래스를 제공합니다
'bidict', 'inverted', 'namedbiddict'

>>> import bidict
>>> dir(bidict)
['MutableMapping', '_LEGALNAMEPAT', '_LEGALNAMERE', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bidict', 'inverted', 'namedbidict', 're', 'wraps']
 

1.입법자 클래스:

>>> from bidict import bidict
>>> D=bidict({'a':'b'})
>>> D['a']
'b'
>>> D[:'b']
'a'
>>> ~D        #反转字典
bidict({'b': 'a'})
>>> dict(D)    #转为普通字典
{'a': 'b'}
>>> D['c']='c'   #添加元素,普通字典的方法都可以用
>>> D
bidict({'a': 'b', 'c': 'c'}) 

2.inverted 클래스, 사전의 키 값을 반전

>>> seq = [(1, 'one'), (2, 'two'), (3, 'three')]
>>> list(inverted(seq))
    [('one', 1), ('two', 2), ('three', 3)]

3.namedbiddict(mapname, fwdname, invname):

>>> CoupleMap = namedbidict('CoupleMap', 'husbands', 'wives')
>>> famous = CoupleMap({'bill': 'hillary'})
>>> famous.husbands['bill']
'hillary'
>>> famous.wives['hillary']
'bill'
>>> famous.husbands['barack'] = 'michelle'
>>> del famous.wives['hillary']
>>> famous
CoupleMap({'barack': 'michelle'})

더 많은 콘텐츠

콜론 방법이 마음에 들지 않으면 명명된 Bidict 클래스를 사용하여 양방향 사전에 2개의 별칭을 제공할 수 있습니다. 이러한 방식으로 정방향 및 역방향 두 개의 하위 사전이 외부 세계에 제공됩니다. 사실 아직도 쌍방향 사전의 형태로 존재합니다:

>>> HTMLEntities = namedbidict('HTMLEntities', 'names', 'codepoints')
>>> entities = HTMLEntities({'lt': 60, 'gt': 62, 'amp': 38}) # etc
>>> entities.names['lt']
60
>>> entities.codepoints[38]
'amp'

단항 역연산자 "~"를 사용하여 입찰 역 매핑 사전을 얻을 수도 있습니다.

>>> import bidict
>>> from bidict import bidict
>>> husbands2wives = bidict({'john': 'jackie'})
>>> ~husbands2wives
bidict({'jackie': 'john'})

다음 상황에서는 ~가 대괄호 보다 우선순위가 낮으므로 반드시 괄호를 추가하세요.

>>> import bidict
>>> from bidict import bidict
>>> husbands2wives = bidict({'john': 'jackie'})
>>> ~husbands2wives
bidict({'jackie': 'john'})

다음 상황에서는 ~가 대괄호보다 우선순위가 낮으므로 반드시 괄호를 추가하세요.

>>> (~bi)['one']
1

biddict는 dict의 하위 클래스가 아니지만 해당 API는 dict의 상위 집합입니다(그러나 fromkeys 메서드가 없고 대신 MutableMapping 인터페이스가 사용됩니다).

반전된 반복자 클래스는 다음과 같이 키와 값을 뒤집습니다.

>>> seq = [(1, 'one'), (2, 'two'), (3, 'three')]
>>> list(inverted(seq))
[('one', 1), ('two', 2), ('three', 3)]

bidict의 invert() 메소드는 inverted와 유사합니다. 종속 모듈: 컬렉션의 MutableMapping, functools로 래핑, re.

입문자는 사전과 비교 가능합니다

>>> bi == bidict({1:'one'})
>>> bi == dict([(1, 'one')])
True

Bidict는 다른 사전에 공통적인 방법도 지원합니다.

>>> bi.get('one')
1
>>> bi.setdefault('one', 2)
1
>>> bi.setdefault('two', 2)
2
>>> len(bi) # calls __len__
2
>>> bi.pop('one')
1
>>> bi.popitem()
('two', 2)
>>> bi.inv.setdefault(3, 'three')
'three'
>>> bi
bidict({'three': 3})
>>> [key for key in bi] # calls __iter__, returns keys like dict
['three']
>>> 'three' in bi # calls __contains__
True
>>> list(bi.keys())
['three']
>>> list(bi.values())
[3]
>>> bi.update([('four', 4)])
>>> bi.update({'five': 5}, six=6, seven=7)
>>> sorted(bi.items(), key=lambda x: x[1])
[('three', 3), ('four', 4), ('five', 5), ('six', 6), ('seven', 7)]

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.