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