Heim >Backend-Entwicklung >Python-Tutorial >Der Trick bei der Verwendung der bidirektionalen Wörterbuchstruktur des Bidict-Moduls in Python

Der Trick bei der Verwendung der bidirektionalen Wörterbuchstruktur des Bidict-Moduls in Python

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-08-04 08:55:422412Durchsuche

Schnellstart

Das Modul stellt drei Klassen zur Verfügung, um einige Operationen von Eins-zu-Eins-Zuordnungstypen zu verarbeiten
'bidict', 'inverted', 'namedbidict'

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

1.Bidict-Klasse:

>>> 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.invertierte Klasse, invertieren Sie den Schlüsselwert des Wörterbuchs

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

3.namedbidict(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'})

Weitere Inhalte

Wenn Ihnen die Doppelpunktmethode nicht gefällt, können Sie die Klasse „namedbidict“ verwenden, um dem bidirektionalen Wörterbuch zwei Aliase zu geben. Auf diese Weise werden der Außenwelt zwei Unterwörterbücher, Vorwärts und Rückwärts, zur Verfügung gestellt. Tatsächlich existiert es immer noch in Form eines Zwei-Wege-Wörterbuchs:

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

Sie können auch den unären Umkehroperator „~“ verwenden, um das Bidict-Umkehrzuordnungswörterbuch zu erhalten.

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

Achten Sie darauf, in den folgenden Situationen Klammern hinzuzufügen, da ~ eine niedrigere Priorität hat als eckige Klammern :

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

Achten Sie darauf, in den folgenden Situationen Klammern hinzuzufügen, da ~ eine niedrigere Priorität als eckige Klammern hat:

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

bidict ist keine Unterklasse von dict, aber seine API ist eine Obermenge von dict (aber es gibt keine fromkeys-Methode und stattdessen wird die MutableMapping-Schnittstelle verwendet).

Die invertierte Iteratorklasse dreht den Schlüssel und den Wert um, z. B.:

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

Die invert()-Methode von bidict ähnelt inverted. Abhängige Module: MutableMapping in Sammlungen, Wraps in Functools, re.

bidikt kann mit Wörterbuch

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

Bidict unterstützt auch Methoden, die in anderen Wörterbüchern üblich sind:

>>> 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)]

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn