【问题标题】:How to create a list of counts from a unique list and a Counter object?如何从唯一列表和 Counter 对象创建计数列表?
【发布时间】:2014-03-13 02:37:54
【问题描述】:

我有一个Counter() 对象,它可以计算字符串列表的出现次数。我有一个唯一的字符串列表。我需要从计数器中产生一个计数列表,然后将零赋给其他计数为 0 的字符串实例。

我可以按照以下方式进行操作,但我可以以更高效/pythonic 的方式实现相同的z 列表吗?

from collections import Counter
x = Counter(['abc','def','abc'])
uniq = sorted(set(['abc', 'def', 'abc', 'abc', 'ghi', 'jkl','jkl']))
z = [x[i] for i in uniq]

输出

>>> z
[2, 1, 0, 0]
>>> uniq
['abc', 'def', 'ghi', 'jkl']

其实最终目的是得到np.array(z)np.array(uniq)

【问题讨论】:

  • 我认为你的方法是最好的。如果您的第二个列表很长,您可以将 np.array(sorted(set(...))) 替换为 np.unique(...)

标签: python arrays list numpy counter


【解决方案1】:

我想你可以使用 Counterupdate 方法将 0 添加到唯一列表中的所有键

>>> from collections import Counter
>>> x = Counter(['abc','def','abc'])
>>> y = ['abc', 'def', 'abc', 'abc', 'ghi', 'jkl','jkl']
>>> x.update(dict.fromkeys(y, 0))

所以x 现在包含您想要的键和值。

或者,如果你想避免构造中间的dict,稍微长一点:

>>> from collections import Counter
>>> x = Counter(['abc','def','abc'])
>>> y = ['abc', 'def', 'abc', 'abc', 'ghi', 'jkl','jkl']
>>> for k in y:
        x[k] += 0

【讨论】:

  • 很好,那你可以u, z = np.array(zip(x.items).T。不过仍然没有 OP 快。
猜你喜欢
  • 2011-10-25
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
相关资源
最近更新 更多