Paste_Image.png
今天的python題目是合并表記錄:
數(shù)據(jù)表記錄包含表索引和數(shù)值,請對表索引相同的記錄進行合并,即將相同索引的數(shù)值進行求和運算,輸出按照key值升序進行輸出。
其實就是利用字典進行的按索引求和,然后按索引排序輸出。
自己練習的代碼對于正常的輸入是沒有問題的,對于一些異常的輸入就沒法了
import sys
d = {}
for line in sys.stdin:
line = line.strip().split(' ')
k = int(line[0])
v = int(line[1])
if k in d:
d[k] += v
else:
d[k] = v
for k,v in sorted(d.items(),key=lambda x:x[0],reverse=False):
print k,v
下面是優(yōu)秀案例:
def fun8():
d = {}
for _ in range(input()):
k, v = map(int, raw_input().split())
d[k] = d.get(k, 0) + v
print '\n'.join(map(lambda x: '%d %d'% (x[0], x[1]), sorted(d.items(), key=lambda x: x[0])))
while True:
try:
fun8()
except EOFError:
break
這段代碼比較簡潔,規(guī)范。在按索引進行運算的時候,它沒有使用if語句判斷key是否在字典中,而是使用了get方法,并且指定了默認值,這是之前沒有注意到的知識點。
字典的一些知識點:
1、dict.get(key, default=None)
2、sorted(iterable,key,reverse),sorted一共有iterable,key,reverse這三個參數(shù)。其中iterable表示可以迭代的對象,例如可以是dict.items()、dict.keys()等,key是一個函數(shù),用來選取參與比較的元素,reverse則是用來指定排序是倒序還是順序,reverse=true則是倒序,reverse=false時則是順序,默認時reverse=false
最后是比較中規(guī)中矩的一個代碼
import sys
n = int(raw_input())
dic = {}
for i in range(n):
item = sys.stdin.readline().strip('\n').split(' ')
k = int(item[0])
v = int(item[1])
if k in dic:
dic[k] += v
else:
dic[k] = v
list1 = dic.keys()
list1.sort()
for i in list1:
print i, dic[i]
參考資料:
https://www.nowcoder.com