【问题标题】:How do I get a count of each of the words in my list? [duplicate]如何计算列表中每个单词的计数? [复制]
【发布时间】:2013-10-18 16:18:35
【问题描述】:

我有一个清单:

 X = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']

想要输出:

{'cztery': 1, 'dwa': 2, 'raz': 3, 'trzy': 2}

【问题讨论】:

  • @Brian 你能写一个答案来证明这一点吗?
  • @tcaswell:我刚刚用groupby写了一个答案。

标签: python list


【解决方案1】:

您可以使用dictionary comprehension

>>> lst = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
>>> {x:lst.count(x) for x in set(lst)}
{'raz': 3, 'cztery': 1, 'dwa': 2, 'trzy': 2}
>>>

或者,您可以使用collections.Counter

>>> from collections import Counter
>>> Counter(lst)
Counter({'raz': 3, 'dwa': 2, 'trzy': 2, 'cztery': 1})
>>>

第二个解决方案可能是你想要的,因为它和理解一样,效率更高,并且还使用了Counter 类,它带有很多很棒的工具(例如most_common 和@987654324 @)。

【讨论】:

  • @Downvoter - 请留下您投反对票的理由。我非常关心我的工作质量。因此,如果您发现我的帖子有问题,请告诉我,以便我解决。
【解决方案2】:

只是用groupby 演示 Brian 建议的版本。

import itertools
data = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
print({k:len(list(v)) for k, v in itertools.groupby(sorted(data))})

【讨论】:

  • 这是O(NLogN) 的复杂度。
  • 这是一个演示。我没有说这是一个好的解决方案。 :-)
【解决方案3】:

另一种使用stdlib的方法:

In [6]: from collections import Counter
In [7]: l = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
In [8]: dict(Counter(l).items())
Out[8]: {'cztery': 1, 'dwa': 2, 'raz': 3, 'trzy': 2}

【讨论】:

  • Err,因为什么原因被否决了?有时要爱 SE 社区:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多