汇总并合并列表及其计数

时间:2018-10-29 14:21:57

标签: python python-3.x list

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

我的列表:

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"]}

1 个答案:

答案 0 :(得分:5)

您可以使用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 docs的说明:

  

将default_factory设置为int可使defaultdict用于计数(例如袋或其他语言的多集)。

     

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

要准确到达“预期输出”:

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