我正在读物品:
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']
答案 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