什么是计算列表中元素出现的pythonic方法?

jia*_*jun 9 python

这就是我做的.在python中有更好的方法吗?

for k in a_list:   
  if kvMap.has_key(k):
    kvMap[k]=kvMap[k]+1   
  else:
    kvMap[k]=1

谢谢

S.L*_*ott 16

使用defaultdict

from collections import defaultdict
kvmap= defaultdict(int)
for k in a_list:
    kvmap[k] += 1
Run Code Online (Sandbox Code Playgroud)


小智 9

单个元素:

a_list.count(k)
Run Code Online (Sandbox Code Playgroud)

所有元素:

counts = dict((k, a_list.count(k)) for k in set(a_list))
Run Code Online (Sandbox Code Playgroud)


Dan*_*ana 7

我不知道,它基本上对我来说很好.您的代码简单易读,这是我认为pythonic的重要组成部分.

你可以修剪它有点像:

for k in a_list:
     kvMap[k] = 1 + kvMap.get(k,0)
Run Code Online (Sandbox Code Playgroud)


Sin*_*ion 5

这么老的问题,但考虑到添加到 adefaultdict(int)是如此常见的用途,因此collections有一个特殊的名称也就不足为奇了(自 Python 2.7 起)

>>> from collections import Counter
>>> Counter([1, 2, 1, 1, 3, 2, 3, 4])
Counter({1: 3, 2: 2, 3: 2, 4: 1})
>>> Counter("banana")
Counter({'a': 3, 'n': 2, 'b': 1})
Run Code Online (Sandbox Code Playgroud)