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. STSDB、NDataBase 对象数据库在不同.net framework下无法读取的解决办法

    STSDB.NDataBase 等对象数据库将对象保存在文件中后,如果在不同的windows平台.不同的.net frameWork下总是无法读取,原因是对象模式已经不同了. 解决的办法也很简单,就是 ...

  2. iOS---The maximum number of apps for free development profiles has been reached.

    真机调试免费App ID出现的问题The maximum number of apps for free development profiles has been reached.免费应用程序调试最 ...

  3. html 概念

    HTML 超文本标记语言,标准通用标记语言下的一个应用.http://baike.baidu.com/link?url=RYF4Pj7VUPifcXatU7OJLGRljIgkp4MjzkspARor ...

  4. Node.js 教程 03 - 创建HTTP服务器

    前言: 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi. 从这个角度看,整个"接收 HTTP 请 ...

  5. SQL Server 2014 Database Mail重复发送邮件特殊案例

    在一数据库服务器(Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64))发现有个作业调用Database Mail发送邮件时, ...

  6. C#冒泡排序算法

    用了两种形式的数据,一个是泛型List,一个是数据int[].记录一下,作为自己学习过程中的笔记. using System; using System.Collections.Generic; us ...

  7. 《WePayUI组件设计的秘密》——2016年第一届前端体验大会分享

    本文是博主参加第一届前端体验大会 | 物勒工名做的分享<WePayUI组件设计的秘密>,内容主要分为2个部分: 一.浅析UI库/框架的未来 讨论的UI库或者框架,主要包含展示和交互的css ...

  8. Servlet编程

    Servlet编程 1. servlet概念及相关接口简介 java Servlet是运行在web服务器或应用服务器上的程序,他是作为来自web浏览器或其他HTTP客户端的请求和HTTP服务器山的数据 ...

  9. 解决IE浏览器文字上面放无内容的元素选不中的方法

    <div class="md1"> <p><i>sdgsgereryeryery</i></p> <label c ...

  10. node fs lstat 如何区别文件和文件夹

    通过lstat 得到 文件的描述对象 stat. stat.isFile() stat.isDirectory()