首页 > 解决方案 > 汇总和合并列表及其计数

问题描述

我有一个并排放置的组合数据列表。我如何总结和映射他们的价值观:

我的列表:

country = ['Australia', 'Australia', 'UAE', 'Australia', 'Israel', 'Ghana', 'Ghana']
views = [1, 2, 4, 5, 77, 5, 2]

虽然我已经能够并排映射它们......像这样:

"Australia: 1",
"Australia: 2",
"UAE: 4",
"Australia: 5",
"Israel: 77",
"Ghana: 5",
"Ghana: "2"

我尝试了什么:

result = dict(zip(country, views))
{'Australia': 5, 'UAE': 4, 'Israel': 77, 'Ghana': 2}

我想得到他们双方的总结和总结……像这样:

"data": {
    "countries": [
        "Australia: 8",
        "UAE: 4",
        "Israel: 77",
        "Ghana: 7"]}

标签: pythonpython-3.xlist

解决方案


您可以使用defaultdict(int)来增加计数:

>>> from collections import defaultdict

>>> country = ['Australia', 'Australia', 'UAE', 'Australia', 'Israel', 'Ghana', 'Ghana']
>>> views = [1, 2, 4, 5, 77, 5, 2]

>>> summary = defaultdict(int)
>>> for c, v in zip(country, views):
...     summary[c] += v
... 
>>> summary
defaultdict(<class 'int'>, {'Australia': 8, 'UAE': 4, 'Israel': 77, 'Ghana': 7})

使用defaultdict(int)隐式将初始计数设置为 0。这是来自collections 文档的解释:

将 default_factory 设置为 int 使 defaultdict 对计数有用(如其他语言中的 bag 或 multiset)。

当第一次遇到一个字母时,它会从映射中丢失,因此 default_factory 函数调用int()以提供默认计数为零。然后递增操作为每个字母建立计数。

要准确获得您的“预期输出”:

d = {}; d['data'] = {'countries': dict(summary)}

推荐阅读