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

2024-05-16 15:52:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份口述清单:

[{'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'}]

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

^{pr2}$

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

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

但是给出的输出给我的是同一个dict中的所有内容,但是我希望它们在dict列表中,每个dict中的每个犯罪

如果你不明白我的意思,你可以问任何问题。在


Tags: instreet类型列表autodescriptionresultcommon
3条回答

鉴于你目前的结果。。。在

>>> result = {'LARCENY' : 3, 'BURGLARY' : 2, 'ROBBERY - STREET' : 3}
>>> result = [{k:v} for k,v in result.items()]
>>> result
[{'BURGLARY': 2}, {'LARCENY': 3}, {'ROBBERY - STREET': 3}]

虽然您的数据结构没有上述意义,但是您可以使用collections中的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)

这将产生以下输出:

^{pr2}$

我建议在你想数数的时候看看Counter类。在

看来你也想维持犯罪的发生顺序。在

所以,用^{}代替普通dict

>>> from collections import OrderedDict
>>> counter = OrderedDict()
>>> for item in data:
...     if 'Description' in item:
...         counter[item['Description']] = counter.get(item['Description'], 0) + 1

现在,用counter中的每个键、值对构造一个新字典,如下所示

^{pr2}$

从评论来看

After I get the desired output I will need to separate the keys and the values into diferent lists,

那么,不要创建字典列表。直接从keys和{}创建两个列表,如下所示

>>> list(counter.keys())
['LARCENY', 'BURGLARY', 'ROBBERY - STREET', 'COMMON ASSAULT', 'AUTO THEFT', 'ROBBERY - COMMERCIAL']
>>> list(counter.values())
[3, 3, 2, 7, 2, 1]

相关问题 更多 >