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.筛选序列中的元素
#使用列表推导式