6.设置dict默认形式
>>> from collections import defaultdict>>> d=defaultdict(list)>>> ddefaultdict(, {})>>> d['a'].append(1)>>> d['a'].append(2)>>> d['b'].append(4)>>> ddefaultdict( , {'a': [1, 2], 'b': [4]})>>>d = defaultdict(set)也可以采用setdefault,但是不够优雅>>>d = {}>>>d.setdefault('a', []).append(1)
7字典的排序
OrderedDict会保留原始的插入顺序
>>>from collections import OrderedDict>>> d=OrderedDict()>>> d['foo'] = 1>>> d['bar'] = 2>>> d['spam'] = 3>>> d['grok'] = 4>>> dOrderedDict([('foo', 1), ('bar', 2), ('spam', 3), ('grok', 4)])
OrderedDict会在内部维持一个双链表,一个新元素插入时会放在队尾,OrderedDict占用的内存是普通dict的两倍,使用时需要谨慎考虑
8 dict的计算
>>> prices = {'ACME': 45.23,'AAPL': 612.78,'IBM': 205.55,'HPQ': 37.20,'FB': 10.75}>>> min_price = min(zip(prices.values(), prices.keys()))>>> min_price(10.75, 'FB')或者>>> min(prices, key=lambda k: prices[k])'FB'>>> prices[min(prices, key=lambda k: prices[k])]10.75
9查找两个dict的公共元素(仅python3支持)a.keys()也可以像set那样直接使用|&-^求合集,交集,差补,差分.
>>> a{'y': 2, 'z': 3, 'x': 1}>>> b{'y': 2, 'w': 10, 'x': 11}>>> type(a.keys())#在python2.7是list类型>>> a.keys()&b.keys(){'y', 'x'}>>> a.keys()-b.keys(){'z'}>>> a.items()&b.items(){('y', 2)}
10从序列中消除重复元素
def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item) if val not in seen: yield item seen.add(val)>>> a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]>>> list(dedupe(a, key=lambda d: (d['x'],d['y'])))[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 2, 'y': 4}]>>> list(dedupe(a, key=lambda d: d['x']))[{'x': 1, 'y': 2}, {'x': 2, 'y': 4}]