寂寞大萝卜 发表于 2018-8-11 09:15:12

python之collection系列

  1、计数器(counter)
  Counter是对字典类型的补充,用于追踪值的出现次数。
  ps:具备字典的所有功能 + 自己的功能
  c = Counter('abcdeabcdabcaba')
  print c
  输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
  2、有序字典(orderedDict )
  orderdDict是对字典类型的补充,他记住了字典元素添加的顺序。
  >>> import connections
  >>> dic = collections.OrderedDict()
  >>> dic['k1'] = 'v1'
  >>> dic['k2'] = 'v2'
  >>> dic['k3'] = 'v3'
  >>> print dic
  OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
  3、默认字典(defaultdict)
  defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
  学前需求:有如下值集合 ,将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
  即: {'k1': 大于66 , 'k2': 小于66}
  一、原生字典解决方法
  python2.7脚本内容:
  #!/usr/bin/env python
  values =
  my_dict = {}
  for value invalues:
  if value>66:
  if my_dict.has_key('k1'):
  my_dict['k1'].append(value)
  else:
  my_dict['k1'] =
  else:
  if my_dict.has_key('k2'):
  my_dict['k2'].append(value)
  else:
  my_dict['k2'] =
  print my_dict
  python3.5脚本内容:
  #!/usr/bin/env python3.5
  list =
  dict = {}
  for k in list:
  if k > 66:
  if 'k1' in dict.keys():
  dict['k1'].append(k)
  else:
  dict['k1'] =
  else:
  if 'k2' in dict.keys():
  dict['k2'].append(k)
  else:
  dict['k2'] =
  print(dict)
  二、defaultdict字典解决方法
  python2.7脚本内容:
  #!/usr/bin/env python
  from collections import defaultdict
  values =
  my_dict = defaultdict(list)
  for value invalues:
  if value>66:
  my_dict['k1'].append(value)
  else:
  my_dict['k2'].append(value)
  print my_dict
  python3.5脚本内容:
  #!/usr/bin/env python3.5
  from collections import defaultdict
  values =
  my_dict = defaultdict(list)
  for value invalues:
  if value>66:
  my_dict['k1'].append(value)
  else:
  my_dict['k2'].append(value)
  print(my_dict)
  4、可命名元组(namedtuple)
  根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。
  >>> import collections
  >>> Mytuple = collections.namedtuple('Mytuple',['x', 'y', 'z'])
  >>> Mytuple = collections.namedtuple('Mytuple',['x', 'y', 'z'])
  >>> obj = Mytuple(11,22,33)
  >>> print obj.x
  11
  >>> print obj.y
  22
  >>> print obj.z
  33
  5、双向队列(deque)
  一个线程安全的双向队列
  deque实例如下:
  #/usr/bin/env python
  #coding: utf8
  import collections
  d = collections.deque()
  d.appendleft('1')
  d.appendleft('2')
  d.appendleft('3')
  d.appendleft('1')
  print d
  r = d.count('1')
  print r
  d.extend(['xx','yy','zz'])
  print d
  d.extendleft(['xxx','yyy','zzz'])
  print d
  d.rotate(1)##循环,从右边拿数据插到左端
  print d
  输出内容:
  deque(['1', '3', '2', '1'])
  2
  deque(['1', '3', '2', '1', 'xx', 'yy', 'zz'])
  deque(['zzz', 'yyy', 'xxx', '1', '3', '2', '1', 'xx', 'yy', 'zz'])
  deque(['zz', 'zzz', 'yyy', 'xxx', '1', '3', '2', '1', 'xx', 'yy'])
  注:既然有双向队列,也有单项队列(先进先出 FIFO ) Queue.Queue
页: [1]
查看完整版本: python之collection系列