print(q.pop()) print(q.pop()) print(q.pop()) # 6.字典中的键映射多个值 # 将多余的值放入列表或者集合,列表有顺序,集合没有重复元素 d = {"a": [1, 2, 3], "b": [4, 5]} e = {"a": {1, 3, 2}, "b": {4, 5}} # 使用collections模块中的defaultdict来构造字典 # 它会自动初始化每个Key刚开始的值 from collectionsNote import defaultdict # 初始化字典每一个键的默认值都是一个列表 # 它会自动的为将要访问的键创建映射实体 d2 = defaultdict(list) d2["a"].append(1) d2["a"].append(2) d2["b"].append(4) print(d2) d1 = defaultdict(set) d1["a"].add(1) d1["b"].add(2) d1["a"].add(4) print(d1) # 或者另外一种方法在普通字典上应用setdefault() d3 = {} d3.setdefault("a", []).append(1) d3.setdefault("b", []).append(2) d3.setdefault("a", []).append(3) print(d3)
] #对rows进行排序 rows.sort(key=itemgetter('date')) #然后进行分组迭代 from itertools import groupby #迭代后返回的是一个元组,分别是目标字段的数据和分组后的items for date,items in groupby(rows,key=itemgetter('date')): print(date) for item in items: print(' ',item) #groupby()通过扫描序列找出拥有相同值,或者是通过参数key指定的函数所返回的值的序列项,将他们分组 #然后groupby创建了一个迭代器,返回一个值和子迭代器,子迭代器中可以产生所有在该分组内具有该值的项 #groupby只能检查连续的项 #另外如果根据日期将数据分组到一起,使用defaultdict()构建一个一键多值字典 from collectionsNote import defaultdict d = defaultdict(list) for row in rows: #创建了个字典默认键对应的是列表,将相同的date作为键,对应的item作为值插入列表 d[row['date']].append(row) #建立字典后,就可以直接访问对应日期的值了,当然需要迭代 for r in d['07/01/2012']: print(r) for key,value in d.items(): print(key) for r in value: print(" ",r) #字典的items(),iteritems(),keys(),iterkeys(),values(),itervalues()方法,前面的返回列表,后面的返回迭代器对象 #这种比groupby()函数快,但是占用内存多 #16.筛选序列中的元素 #使用列表推导式