namedtuple
一个对象能不能作为字典的key,就取决于其有没有__hash__方法。所以所有python自带类型中,除了list、dict、set和内部至少带有上述三种类型之一的tuple之外,其余的对象都能当key。但是数值/字符串/完全不可变的元组/函数/类可以作为key, 在此主要提一下一个特殊的类型,namedtuple
python自带类型tuple,可以存储一个Python对象序列。与list不同的是,你不能改变tuple中元素的值。tuple的元素是通过索引进行访问的。namedtuple也是tuple,但它可以不通过索引值访问,可以把它看成一个字典通过名字进行访问,但是其中的值不可变
from collections import namedtuple
point = namedtuple('point', ['chr', 'pos'])
#p1 p2等价
p1 = point(1,100)
p2 = point(chr = 1,pos=100)
defaultdict
在python中如果访问不存在的key值,则会报错KeyError,可以使用defaultdict来设置默认值
from collections import defaultdict
dd = defaultdict(list)
dd['bar'].append('quux')
##print
##defaultdict(<type 'list'>, {'bar': ['quux']})
from collections import namedtuple
from collections import defaultdict
point = namedtuple('point', ['chr', 'pos'])
point_dict = defaultdict(list)
p1 = point(1,100)
point_dict[p1].append('ha')
##print point_dict
##defaultdict(<type 'list'>, {point(chr=1, pos=100): ['ha']})