collections模块基本介绍

collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型

namedtuple() factory function for creating tuple subclasses with named fields
deque list-like container with fast appends and pops on either end
ChainMap dict-like class for creating a single view of multiple mappings
Counter dict subclass for counting hashable objects
OrderedDict dict subclass that remembers the order entries were added
defaultdict dict subclass that calls a factory function to supply missing values
UserDict wrapper around dictionary objects for easier dict subclassing
UserList wrapper around list objects for easier list subclassing
UserString wrapper around string objects for easier string subclassing

namedtuple()

tuple类似于数组,只能通过下表来访问各个元素。使用namedtuple,每个元素有自己的名字,数据的意义一目了然。

In [22]: from collections import namedtuple

In [23]: Point = namedtuple('Point', ['x', 'y'])

In [24]: p = Point(11, y=22)

In [25]: p[0] + p[1]
Out[25]: 33 In [26]: p.x
Out[26]: 11 In [27]: p.y
Out[27]: 22 In [28]: p
Out[28]: Point(x=11, y=22) In [29]: x, y = p In [30]: x
Out[30]: 11

命名元组还有三种额外的方法,两个属性

classmethod somenamedtuple._make(iterable)

  Class method that makes a new instance from an existing sequence or iterable.

  从一个已经存在的序列或可迭代对象创建一个新实例

In [1]: from collections import namedtuple

In [2]: Point = namedtuple('Point', ['x', 'y', 'z'])

In [3]: t = [1, 2, 3]

In [4]: p = Point._make(t)

In [5]: p
Out[5]: Point(x=1, y=2, z=3)

somenamedtuple._asdict()

  Return a new OrderedDict which maps field names to their corresponding values:

  返回一个新的OrderedDict,并以field names作为key, field names对应值作为values。

In [16]: from collections import namedtuple

In [17]: Point = namedtuple('Point', ['x', 'y', 'z'])

In [18]: t = [1, 2, 3]

In [19]: p = Point._make(t)

In [20]: p
Out[20]: Point(x=1, y=2, z=3) In [21]: d = p._asdict() In [22]: d.get('x')
Out[22]: 1 In [23]: d
Out[23]: OrderedDict([('x', 1), ('y', 2), ('z', 3)])

somenamedtuple._replace(kwargs)

  Return a new instance of the named tuple replacing specified fields with new values:

  返回一个用新值替换指定字段后的命名元组的一个新实例。

In [24]: from collections import namedtuple

In [25]: Point = namedtuple('Point', ['x', 'y', 'z'])

In [26]: t = [1, 2, 3]

In [27]: p = Point._make(t)

In [28]: p
Out[28]: Point(x=1, y=2, z=3) In [29]: p._replace(z=4)
Out[29]: Point(x=1, y=2, z=4) In [30]: p.z
Out[30]: 3 In [31]: p = p._replace(z=4) In [33]: p.z
Out[33]: 4 In [34]: p
Out[34]: Point(x=1, y=2, z=4)

somenamedtuple._fields

  Tuple of strings listing the field names. Useful for introspection and for creating new named tuple types from existing named tuples.

  字段名列表

In [35]: p._fields
Out[35]: ('x', 'y', 'z')

somenamedtuple._source

  A string with the pure Python source code used to create the named tuple class. The source makes the named tuple self-documenting. It can be printed, executed using exec(), or saved to a file and imported.

  创建命名元组的纯python代码

In [36]: p._source
Out[36]: "from builtins import property as _property, tuple as _tuple\nfrom operator import itemgetter as _itemgetter\nfrom collections import OrderedDict\n\nclass Point(tuple):\n 'Point(x, y, z)'\n\n __slots__ = ()\n\n _fields = ('x', 'y', 'z')\n\n def __new__(_cls, x, y, z):\n 'Create new instance of Point(x, y, z)'\n return _tuple.__new__(_cls, (x, y, z))\n\n @classmethod\n def _make(cls, iterable, new=tuple.__new__, len=len):\n 'Make a new Point object from a sequence or iterable'\n result = new(cls, iterable)\n if len(result) != 3:\n raise TypeError('Expected 3 arguments, got %d' % len(result))\n return result\n\n def _replace(_self, **kwds):\n 'Return a new Point object replacing specified fields with new values'\n result = _self._make(map(kwds.pop, ('x', 'y', 'z'), _self))\n if kwds:\n raise ValueError('Got unexpected field names: %r' % list(kwds))\n return result\n\n def __repr__(self):\n 'Return a nicely formatted representation string'\n return self.__class__.__name__ + '(x=%r, y=%r, z=%r)' % self\n\n def _asdict(self):\n 'Return a new OrderedDict which maps field names to their values.'\n return OrderedDict(zip(self._fields, self))\n\n def __getnewargs__(self):\n 'Return self as a plain tuple. Used by copy and pickle.'\n return tuple(self)\n\n x = _property(_itemgetter(0), doc='Alias for field number 0')\n\n y = _property(_itemgetter(1), doc='Alias for field number 1')\n\n z = _property(_itemgetter(2), doc='Alias for field number 2')\n\n"

OrderedDict()

  字典都是是无序的,通过OrderedDict创建的字典会记住插入的顺序。

In [40]: from collections import OrderedDict

In [41]: hexm = {'name': 'hexiaoming', 'age': 15, 'sexy': 'male'}

In [42]: dict(hexm)
Out[42]: {'age': 15, 'name': 'hexiaoming', 'sexy': 'male'} In [43]: OrderedDict(hexm)
Out[43]: OrderedDict([('name', 'hexiaoming'), ('age', 15), ('sexy', 'male')])

In [44]: d1 = OrderedDict(hexm)

In [45]: d1['eat'] = 'gousi'

In [46]: d1
Out[46]:
  OrderedDict([('name', 'hexiaoming'),
    ('age', 15),
    ('sexy', 'male'),
    ('eat', 'gousi')])

  对字典排序:

In [47]: d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

In [48]: OrderedDict(sorted(d.items(), key=lambda t: t[0]))
Out[48]: OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) In [49]: OrderedDict(sorted(d.items(), key=lambda t: t[1]))
Out[49]: OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) In [50]: OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
Out[50]: OrderedDict([('pear', 1), ('apple', 4), ('banana', 3), ('orange', 2)])

python collections模块的更多相关文章

  1. Python collections模块总结

    Python collections模块总结 除了我们使用的那些基础的数据结构,还有包括其它的一些模块提供的数据结构,有时甚至比基础的数据结构还要好用. collections ChainMap 这是 ...

  2. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  3. Python collections 模块用法举例

    Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...

  4. Python——collections模块、time模块、random模块、os模块、sys模块

    1. collections模块 (1)namedtuple # (1)点的坐标 from collections import namedtuple Point = namedtuple('poin ...

  5. Python——collections模块

    collections模块 collections模块在内置数据类型(dict.list.set.tuple)的基础上,还提供了几个额外的数据类型:ChainMap.Counter.deque.def ...

  6. python collections模块详解

    参考老顽童博客,他写的很详细,例子也很容易操作和理解. 1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选 ...

  7. python collections模块 之 defaultdict

    defaultdict 是 dict 的子类,因此 defaultdict 也可被当成 dict 来使用,dict 支持的功能,defaultdict 基本都支持.但它与 dict 最大的区别在于,如 ...

  8. python collections 模块 之 deque

    class collections.deque(iterable[,maxlen]): 返回 由可迭代对象初始化的 从左向右的 deque 对象. maxlen: deque 的最大长度,一旦长度超出 ...

  9. python collections 模块 之namedtuple

    namedtuple collections.namedtuple(typename, filed_name, *, rename=False, module=None) 创建一个以 typename ...

随机推荐

  1. Android事件分发机制浅谈(三)--源码分析(View篇)

    写事件分发源码分析的时候很纠结,网上的许多博文都是先分析的View,后分析ViewGroup.因为我一开始理解的时候是按我的流程图往下走的,感觉方向很对,单是具体分析的时候总是磕磕绊绊的,老要跳到Vi ...

  2. LinuxMint装JDK和Eclipse

    Linux Mint 装JDK和Eclipse 前言 在尝试了好几个发行版后终于锁定了Linux Mint Cinnamon .那么就得配置好环境了. 这里讲一下JAVA环境,配置JDK和Eclips ...

  3. linux php编译安装

    1.下载php安装包 http://cn2.php.net/get/php-5.5.36.tar.gz/from/this/mirror 默认情况下Nginx和PHP他俩之间是一点感觉没有的.Apac ...

  4. uploadify插件Http Error(302)错误记录(MVC)

    由于项目(asp.net MVC)需要做一个附件上传的功能,使用的是jQuery的Uploadify插件的2.1.0版本,上传文件到自己项目指定的文件夹下面.做完之后,在谷歌上测试是正确的,在火狐上报 ...

  5. Spring类型转换 ConversionSerivce Convertor

    以String转Date为例:   定义转换器:    import java.text.ParseException; import java.util.Date; import org.apach ...

  6. Java基础知识笔记(八:集合类)

    目录 1  集合类简介  2  List介绍及简单使用 2.1  LinkedList介绍及简单使用 2.2  ArrayList介绍及简单使用 2.3  Vector介绍及简单使用 2.3.1  S ...

  7. Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解

    方法inflate(int resource, ViewGroup root, boolean attachToRoot) 中 第一个参数传入布局的资源ID,生成fragment视图,第二个参数是视图 ...

  8. everything + autohotkey的配合使用

    一,everything是文件搜索神奇,瞬间定位到文件,在众多的文件中找到你需要的文件.(百度下载就好,分32位和64位)   二,autohotkey是热键启动设置,方便的打开常用的应用. 直接使用 ...

  9. 2016年Web前端面试题目

    以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正.:) HTML/CSS部分 1. ...

  10. 时隔一年再读到the star

    The Star Arthur C. Clarke It is three thousand light-years to the Vatican. Once, I believed that spa ...