- Dict(字典)
- Set(集合)
- collections(内置库)
- functools(内置库)
Dict(字典)
字典视为一组无序的键值对,并要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:{}。在括号内放置以逗号分隔的键值对列表,将初始键值对添加到字典中;这也是字典在输出上的写法。
字典上的主要操作是使用某个键存储值并提取给定键的值。也可以删除带有del的键值对。
字典对象的keys()方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需对其应用sorted()函数.要检查单个键是否在字典中,请使用in关键字。
1.
2.
3. 字典常用方法
4. items()和iteritems()区别:
字典的items()作用:是可以将字典中的所有项,以列表方式返回。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的.
字典的iteritems()作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。
-
迭代器: 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator;
- list、dict、str虽然是Iterable,却不是Iterator。 为什么list、dict、str等数据类型不是Iterator?这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
- Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。*
-
总结
- iteritems()方法在需要迭代结果的时候使用最适合,而且它的工作效率非常的高。
- 在Python2.x中,iteritems() 用于返回本身字典列表操作后的迭代器【Returns an iterator on all items(key/value pairs) 】,不占用额外的内存。
- 在Python 3.x 里面,iteritems()方法已经废除了。在3.x里用 items()替换iteritems() ,可以用于 for 来循环遍历。
Set(集合)
- 集合对象是一组无序排列的可哈希的值,集合成员可以做字段中的键,集合支持用in和 not in操作符检查成员,有len()得到集合的大小,用for循环迭代集合的成员,记住:集合是无序的.
- 集合有两种不同的类型, 可变集合(set)和不可变集合(frozenset)
1.
2.
3.
collections
- 该模块实现了专门的容器数据类型,提供了Python的通用内置容器,dict,list,set和tuple的替代方法。
-
collections内置容器
1. namedtuple
- namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便
-
例子
2.deque
- 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈;
- deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
-
例子
3.defaultdict
- 返回一个新的类字典对象。 defaultdict是内置dict类的子类。它会覆盖一个方法并添加一个可写实例变量.其余功能与dict类相同
4.OrderedDict
-
有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,将按照首次添加键的顺序返回项目。
functools
- functools模块用于高阶函数:作用于或返回其他函数的函数。通常,任何可调用对象都可以被视为用于此模块的功能。
1. wraps
- Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring。