如何计算字典列表中值的出现次数?

Sta*_*agg 3 python dictionary list python-2.7

我有这个字典列表:

[{'Description': 'LARCENY'}, {'Description': 'LARCENY'}, {'Description': 'BURGLARY'}, {'Description': 'ROBBERY - STREET'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'AUTO THEFT'}, {'Description': 'AUTO THEFT'}, {'Description': 'ROBBERY - STREET'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'BURGLARY'}, {'Description': 'BURGLARY'}, {'Description': 'LARCENY'}, {'Description': 'ROBBERY - COMMERCIAL'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}]
Run Code Online (Sandbox Code Playgroud)

我需要创建一个函数来遍历这些字典并计算每种类型的犯罪发生了多少次。输出应该是一个像这样的字典列表:

[{'LARCENY' : 3}, {'BURGLARY' : 2}, {'ROBBERY - STREET' : 3}...
Run Code Online (Sandbox Code Playgroud)

对于每种类型的犯罪,我需要知道该犯罪发生了多少次。这是我到目前为止:

result = {}
for k in data:
   if 'Description' in k:
    result[k['Description']] = result.get(k['Description'], 0) + 1 
Run Code Online (Sandbox Code Playgroud)

但是给出的输出在同一个字典中给了我所有的东西,但我希望它们在一个字典列表中,每个犯罪与每个字典。

如果您不明白我的意思,请随时提出任何问题。

Mic*_*mpe 5

虽然您的数据结构如上所述没有意义,但您可以使用集合中的 Counter 类轻松解决此问题。

from collections import Counter

crimes = [{'Description': 'LARCENY'}, {'Description': 'LARCENY'}, {'Description': 'BURGLARY'}, {'Description': 'ROBBERY - STREET'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'AUTO THEFT'}, {'Description': 'AUTO THEFT'}, {'Description': 'ROBBERY - STREET'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'BURGLARY'}, {'Description': 'BURGLARY'}, {'Description': 'LARCENY'}, {'Description': 'ROBBERY - COMMERCIAL'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}, {'Description': 'COMMON ASSAULT'}]

c = Counter()
for item in crimes:
    c[item["Description"]] += 1

print(c)
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

Counter({'COMMON ASSAULT': 7, 'BURGLARY': 3, 'LARCENY': 3, 'AUTO THEFT': 2, 'ROBBERY - STREET': 2, 'ROBBERY - COMMERCIAL': 1})
Run Code Online (Sandbox Code Playgroud)

我建议您在想计算事物时查看 Counter 类。