python Cookbook
1.5 heapq模块实现一个优先级队列
#实现优先级队列 import heapq class PriorityQueue: def __init__(self): self._queue=[] self._index=0 def push(self,item,priority): heapq.heappush(self._queue,(-priority,self._index,item)) self._index += 1 def pop(self): return heapq.heappop(self._queue)[-1] def __get__(self):#get(),set() return self._queue class Item: def __init__(self,name): self.name=name def __repr__(self): return 'Item({!r})'.format(self.name) q=PriorityQueue() q.push(Item('foo'),1) q.push(Item('bar'),5) q.push(Item('spam'),4) q.push(Item('grop'),1) q.pop()#bar q.pop()#spam q.pop()#foo print(q.__get__())
1.6 一键多值字典 1.7有序字典
#字典中将键映射到多个值上,字典是一种关联容器 from collections import defaultdict d=defaultdict(list)#列表,有序 d['a'].append(1) d['a'].append(2) d['b'].append(4) #print(d) d=defaultdict(set)#集合,无序 d['a'].add(1) d['a'].add(1) d['b'].add(4) #print(d) # d=defaultdict(list)#有问题 # pairs={'a':1, # 'b':2} # for key,value in pairs: # d[key].append(value) #print(d) #1.7让字典保持有序OrderedDict from collections import OrderedDict import json d= OrderedDict() d['foo']=1 d['bar']=2 d['spam']=3 d['grok']=4 for key in d: print(key,d[key]) json.dumps(d) print(d)
1.8字典的计算
#与字典有关的计算问题 #zip()将键和值反转 price={ 'ACME':45.23, 'AAPL':612.78, 'IBM':205.55, 'HPQ':37.20, 'FB':10.75 } min_price=min(zip(price.values(),price.keys())) #print(min_price) max_price=max(zip(price.values(),price.keys())) #print(max_price) #数据排序 prices_sorted=sorted(zip(price.values(),price.keys())) #print(prices_sorted) #1.9在两个字典中寻找相同点 a={ 'x':1, 'y':2, 'z':3 } b={ 'w':10, 'x':11, 'y':2 } print(a.keys()&b.keys()) print(a.keys()-b.keys()) print(a.items()&b.items())#支持集合操作,返回键值对对象 print(a.values()&b.values())#错误,注意不支持values方法集合操作
posted on 2019-05-16 20:06 yaqiong1112 阅读(212) 评论(0) 编辑 收藏 举报