【问题标题】:Python tuple operations and countPython元组操作和计数
【发布时间】:2012-06-30 22:12:15
【问题描述】:

我有以下元组。我想构建一个输出如输出中所述的字符串。我想计算与“a”对应的所有元素,即,有多少 k1 出现在“a”等。什么是最简单的方法

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]

输出应该是一个字符串 output=""

 a k1  3
 a k2  1
 b k1  1
 b k2  3
 c k3  1
 c k4  1

【问题讨论】:

    标签: python string tuples


    【解决方案1】:

    使用来自collectionsCounter 类:

    >>> a = [('a', 'k1'), ('b', 'k2'), ('a', 'k2'), ('a', 'k1'), ('b', 'k2'), ('a', 'k1'), ('b', 'k2'), ('c', 'k3'), ('c', 'k4')]
    >>> from collections import Counter
    >>> c = Counter(a)
    Counter({('b', 'k2'): 3, ('a', 'k1'): 3, ('a', 'k2'): 1, ('c', 'k3'): 1, ('c', 'k4'): 1})
    

    您可以使用c.items() 来迭代计数:

    >>> for item in c.items():
    ...     print(item)
    ... 
    (('a', 'k2'), 1)
    (('c', 'k3'), 1)
    (('b', 'k2'), 3)
    (('a', 'k1'), 3)
    (('c', 'k4'), 1)
    

    以上代码是 Python 3。Counter 类是 Python 2.7 中的新类。您现在可以按所需顺序重新排列项目,并在需要时将它们转换为字符串。

    【讨论】:

      【解决方案2】:

      您可以使用defaultdict 轻松完成添加部分。默认字典的工作方式与普通字典类似,但它具有空键存储的默认值,因此您可以在迭代数据集时轻松增加计数器。

      a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]
      from collections import defaultdict
      b = defaultdict(int)
      for item in a:
          b[item] += 1
      
      print b
      defaultdict(<type 'int'>, {('a', 'k2'): 1, ('c', 'k3'): 1, ('b', 'k2'): 3, ('a', 'k1'): 3, ('c', 'k4'): 1})
      

      为了漂亮地打印它,只需遍历结果数据并按照您的需要打印。

      for key, value in b.iteritems():
          print '%s %s %s' % (key[0], key[1], value)
      

      【讨论】:

      • collections.Counter 更适合这里
      • @gnibbler :计数器如何更适合。这也很好用。对于输出我在这两种情况下第二次循环。计数器有什么优势
      • Counter 纯粹适用于计算唯一信息位。因此,如果您只想计算出现次数,那么是的,Counter 更适合。
      • @Rajeev,这是一个非常常见的模式,默认字典被添加到集合模块并称为计数器。当然有性能优势,但在代码中也更清楚地表明正在counting
      猜你喜欢
      • 2017-04-05
      • 1970-01-01
      • 2013-12-18
      • 2016-06-03
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多