题目描述
数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1
输入
4
0 1
0 2
1 2
3 4
输出
0 3
1 2
3 4
解法:
from collections import defaultdict
while True:
try:
a,dd=int(input()),defaultdict(int)
for i in range(a):
key,val=map(int,input().split())
dd[key]+=val
for i in sorted(dd.keys()):
print(str(i)+" "+str(dd[i]))
except:
break
补充:
1.注意这里有可能输入没有对应值的键,所以用collections模块的defaultdict类,这样在调用的时候,dict[key] = xxx,即使key不在字典里也不会报错。(而普通dict会报错,如下例所示)它的其他功能与dict相同,但会为一个不存在的键提供默认值。
例如:
bag = ['apple', 'orange', 'cherry', 'apple','apple', 'cherry', 'blueberry']
count = {}
for fruit in bag:
count[fruit] += 1
错误:
KeyError: 'apple',因为apple这个key事先不存在于该字典中。
而这样则不会报错:
import collections
bag = ['apple', 'orange', 'cherry', 'apple','apple', 'cherry', 'blueberry']
count = collections.defaultdict(int)
for fruit in bag:
count[fruit] += 1
输出:
defaultdict(<class 'int'>, {'apple': 3, 'orange': 1, 'cherry': 2, 'blueberry': 1})
defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0.
用法:
(1)defaultdict(int):初始化为 0
(2)defaultdict(float):初始化为 0.0
(3)defaultdict(str):初始化为 ”
2.当split()不带参数时,默认以空格进行分割,当带参数时,以该参数进行分割。
例如:
string1="a /b /c /d"
string1.split(" /")
输出:[‘a’, ‘b’, ‘c’, ‘d’]
3.sorted(iterable, cmp=None, key=None, reverse=False)
默认升序,降序请加reverse=True
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2])# 按年龄排序
输出:
[(‘dave’, ‘B’, 10), (‘jane’, ‘B’, 12), (‘john’, ‘A’, 15)]