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