6.设置dict默认形式python
>>> from collections import defaultdict >>> d=defaultdict(list) >>> d defaultdict(<type 'list'>, {}) >>> d['a'].append(1) >>> d['a'].append(2) >>> d['b'].append(4) >>> d defaultdict(<type 'list'>, {'a': [1, 2], 'b': [4]}) >>>d = defaultdict(set) 也能够采用setdefault,可是不够优雅 >>>d = {} >>>d.setdefault('a', []).append(1)
7字典的排序app
OrderedDict会保留原始的插入顺序python2.7
>>>from collections import OrderedDict >>> d=OrderedDict() >>> d['foo'] = 1 >>> d['bar'] = 2 >>> d['spam'] = 3 >>> d['grok'] = 4 >>> d OrderedDict([('foo', 1), ('bar', 2), ('spam', 3), ('grok', 4)])
OrderedDict会在内部维持一个双链表,一个新元素插入时会放在队尾,OrderedDict占用的内存是普通dict的两倍,使用时须要谨慎考虑spa
8 dict的计算code
>>> 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()) <class 'dict_keys'>#在python2.7是list类型 >>> a.keys()&b.keys() {'y', 'x'} >>> a.keys()-b.keys() {'z'} >>> a.items()&b.items() {('y', 2)}
10从序列中消除重复元素ip
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}]