快速入门
- >>> husbands2wives = bidict({
- 'john': 'jackie'
- })
- >>> husbands2wives['john'] # the forward mapping is just like with dict
- 'jackie'
- >>> husbands2wives[:'jackie'] # use slice for the inverse mapping
- 'john'
"在切片的前面加上冒号表示逆映射. 跟数据的切片类似, husbands2wives["john"] 和 husbands2wives["john":] 的效果一样.
更多内容
如果你不喜欢冒号的方式, 可以使用 namedbidict 类给双向字典起 2 个别名. 这样对外会提供正向和逆向的 2 个子字典. 实际上还是以一个双向 字典的形式存在:
- >>> htmlEntities = namedbidict('HTMLEntities', 'names', 'codepoints')
- >>> entities = HTMLEntities({
- 'lt': 60, 'gt': 62, 'amp': 38
- }) # etc
- >>> entities.names['lt']
- 60
- >>> entities.codepoints[38]
- 'amp'
还可以使用一元的逆运算符 "~" 获取 bidict 逆映射字典.
- >>> 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
bidict 不是 dict 的子类, 但它的 API 的是 dict 的超集 (但没有 fromkeys 方法, 改用了 MutableMapping 接 口).
迭代器类 inverted 会翻转 key 和 value, 如:
- >>> seq = [(1, 'one'), (2, 'two'), (3, 'three')]
- >>> list(inverted(seq))
- [('one', 1), ('two', 2), ('three', 3)]
bidict 的 invert() 方法和 inverted 类似. 依赖模块: collections 中的 MutableMapping,functools 中的 wraps,re.
bidict 可以和字典进行比较
- >>> 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)]
来源: http://www.jianshu.com/p/2873f79fe454