从列表中获取运行总计

时间:2016-12-20 15:22:45

标签: python

我正在读物品:

for line in sys.stdin:
    line = line.strip()
    data = line.split("-")

如果我在阅读时打印data,它看起来像是:

['Adam', '5']
['Peter', '7']
['Adam', '8']
['Lucy', '2']
['Peter', '4']

如何获取每个唯一名称的运行总计,例如我的新列表如下:

['Adam', '13'],
['Peter', '11'],
['Lucy', '2']

4 个答案:

答案 0 :(得分:5)

使用collections.Counter()计算出现次数:

import collections

lines = [['Adam', '5'],
         ['Peter', '7'],
         ['Adam', '8'],
         ['Lucy', '2'],
         ['Peter', '4']]

counter = collections.Counter()
for data in lines:
    counter[data[0]] += int(data[1])

print(counter)

你会得到:

Counter({'Adam': 13, 'Peter': 11, 'Lucy': 2})

答案 1 :(得分:1)

我建议创建一个dictonary并随时更新。我假设 data 的数据格式是一个列表列表。

finalList = {}

for name, value in data:
    if name in finalList.keys():
        finalList[name] = finalList[name] + int(value)
    else:
        finalList[name] = int(value)

print(finalList)

答案 2 :(得分:1)

使用int类型初始化defaultdict并使用名称作为键

from collections import defaultdict
name_list = defaultdict(int)
for line in sys.stdin:
    line = line.strip()
    data = line.split("-")
    name = data[0]
    value = int(data[1])
    name_list[name] += value
for key, value in name_list.items(): print key, value

答案 3 :(得分:0)

Pandas在处理这种情况方面表现非常出色

import pandas as pd
df_data=pd.read_csv(filepath_or_buffer=path,sep='_',names =['Name','value'])
df=df_data.groupby(['Name'])['value'].sum()

print df

输出

'Adam'     13
'Lucy'      2
'Peter'    11

输入文件

Adam_5
Peter_7
Adam_8
Lucy_2
Peter_4