所以我有一个包含9个不同电话号码的文件。每次通话都有一条线路和持续时间。我想将呼叫的持续时间加起来,并将它们与自己的电话号码相匹配。
以下是文件的一部分:
7803214567;94
7801234567;602
7801234567;910
7808765432;925
7801234567;631
第一个是电话号码,第二个是持续时间,以秒为单位。为了更清楚,例如:7801234567
,我想添加602
,910
和631
,并将其与自己的电话号码7801234567
相匹配。< / p>
答案 0 :(得分:5)
使用defaultdict:
from collections import defaultdict
call_times = defaultdict(int)
with open('phone.txt') as fobj:
for line in fobj:
number, call_time = line.split(';')
call_times[number.strip()] += int(call_time)
>>> call_times
defaultdict(int, {'7801234567': 2143, '7803214567': 94, '7808765432': 925})
defaultdict
允许指定为缺失键创建新值的可调用对象。例如,这个defaultdict
:
>>> call_times = defaultdict(int)
>>> call_times
defaultdict(int, {})
返回0
以获取它没有的密钥:
>>> call_times['a']
0
因为它使用int()
来表示这些键:
>>> int()
0
因此,您可以使用+=
为您添加数字:
>>> defaultdict(int, {'a': 0})
>>> call_times['b'] += 1
>>> call_times
defaultdict(int, {'a': 0, 'b': 1})
答案 1 :(得分:3)
您似乎只想计算每个唯一电话号码的总分钟数。
您可以使用counter:
from collections import Counter
c = Counter()
with open("path/to/file.txt", 'r') as f:
for line in f:
k, v = line.split(";")
c += Counter({k: int(v)})
>>> print(c)
Counter({'7801234567': 2143, '7808765432': 925, '7803214567': 94})