我有按字母順序排序的檔案輸入
Asburn 9
Ashley 10
Ashley 11
Bojourn 12
我想要像這樣的輸出
Asburn 9
Ashley 21
Bojourn 12
我用過的代碼:
counts = defaultdict(int)
for line in sys.stdin:
word, count = line.split()
counts[word] = int(count)
for wrd, count in counts.items():
print("{}\t{}".format(wrd,count))
但我不能用字典。我應該如何實作它
uj5u.com熱心網友回復:
在 Python 標準庫的幫助下:
from sys import stdin
from itertools import groupby
from operator import itemgetter
for word, group in groupby(map(str.split, stdin), itemgetter(0)):
print(word, sum(int(count) for _, count in group))
在線嘗試!
uj5u.com熱心網友回復:
試試這個:
prev_word = None
prev_count = 0
for line in sys.stdin:
word, count = line.split()
count = int(count)
if word != prev_word:
if prev_word is not None:
print(prev_word, str(prev_count))
prev_count = count
prev_word = word
else:
prev_count = count
if prev_word != None:
print(prev_word, prev_count)
快速測驗:以下代碼回傳預期輸出
prev_word = None
prev_count = 0
for line in ['ashutosh 9', 'ashutosh 10', 'check 11', 'check 11', 'zebra 11']:
word, count = line.split()
count = int(count)
if word != prev_word:
if prev_word is not None:
print(prev_word, prev_count)
prev_count = count
prev_word = word
else:
prev_count = count
if prev_word != None:
print(prev_word, prev_count)
uj5u.com熱心網友回復:
使用正則運算式列出鍵值之類的術語,按鍵對它們進行分組,將每個組的鍵值與zip.
import re
import itertools as it
text = """Asburn 9
Ashley 10
Ashley 11
Bojourn 12"""
pairs = re.findall(r'^(. ?)\s(\d )\n*', text, re.M)
groups = [zip(*grp) for _, grp in it.groupby(pairs, lambda p: p[0])]
for keys, values in groups:
print(keys[0], sum(map(int, values)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479296.html
下一篇:根據經度和緯度計算離我最近的商店
